【发布时间】:2016-10-09 00:13:20
【问题描述】:
我不是 python 专家。我不明白为什么我不能用这个 def 为这个字典的键分配一个值数组。
这就是我使用 sdk 定义的方式。
order_obj = Order(None)
order_obj.customerIp("14.140.42.67")
order_obj.merchantRefNum(RandomTokenGenerator().generateToken())
order_obj.currencyCode("CAD")
order_obj.totalAmount("1125")
redirect = Redirect(None)
redirect.rel("on_success")
redirect.uri("http://outwander.ca:{}/redirect")
return_keys_list = []
return_keys_list.append('id')
return_keys_list.append('transaction.amount')
redirect.returnKeys(return_keys_list)
redirect_list = []
redirect_list.append(redirect.__dict__)
order_obj.redirect(redirect_list)
这是我使用的sdk中的具体定义 https://github.com/OptimalPayments/Python_SDK/blob/63e1ae662a4447bd65c907563eec9effc602dd74/src/PythonNetBanxSDK/HostedPayment/Redirect.py
'''
Property Return Keys
'''
def returnKeys(self, return_keys):
self.__dict__['returnKeys'] = return_keys
从我可以调试的情况来看,将数组转换为要发送的 json 时出现问题。循环找到数组并尝试转换内部的元素(字符串),但默认情况下循环考虑每个给定的参数为数组,returnKeys参数被跳过...
'''
Serializing object
@param: Dictionary Object
@return: Serialized data
'''
def serialize(self, obj):
return (json.dumps(self.to_dictionary(obj)))
'''
Convert object to a dictionary
@param: POJO Object
@return: Dictionary Object
'''
def to_dictionary(self, obj):
obj_dict = dict()
for key in obj.__dict__.keys():
try:
if(type(obj.__dict__[key]) is list):
content = []
for count in range(0, obj.__dict__[key].__len__()):
content.append(
self.to_dictionary(obj.__dict__[key][count]))
obj_dict[key] = content
elif(isinstance(obj.__dict__[key], DomainObject)):
obj_dict[key] = self.to_dictionary(obj.__dict__[key])
else:
obj_dict[key] = obj.__dict__[key]
except KeyError:
pass
except AttributeError:
pass
return (obj_dict)
我没有问题将一个键分配给一个值,但是当我尝试将一个数组分配给一个键时,它不起作用,它只是从 json 输出中忽略了这个键。
解决方案(黑客)
order_obj = Order(None)
order_obj.customerIp("14.140.42.67")
order_obj.merchantRefNum(RandomTokenGenerator().generateToken())
order_obj.currencyCode("CAD")
order_obj.totalAmount("1125")
redirect = Redirect(None)
redirect.rel("on_success")
redirect.uri("http://outwander.ca:{}/redirect")
redirect.returnKeys(('id', 'transaction.amount'))
redirect_list = []
redirect_list.append(redirect.__dict__)
order_obj.redirect((redirect_list))
【问题讨论】:
-
所以问题出在您未包含在问题中的其他代码中?
-
代码抛出异常 - 哪个代码,什么异常?您应该使用
setattr()而不是__dict__。见stackoverflow.com/questions/432786/… -
@khelwood 包括我所知道的一切。我对 SDK 不熟悉,但它是开源的。
-
请包含您遇到的异常
-
我没有遇到任何异常。只是我没有得到预期的 json 字符串。相反,它是空的。我尝试在线使用python编译器为带有dict的键分配值并且它可以工作......所以我猜它在序列化中。您可能想查看 to_dictionary 定义...@rrauenza
标签: python arrays json dictionary sdk