我正在经历一个奇怪的序列化"效果"我无法弄清楚为什么会这样。
基本上,一个属性按预期表示,另一个属性不表示。 例如,根据下面的测试,我希望得到: {" source_system":" ABC"," target_system":" DEF"} 不 {" source_system":[" ABC"]," target_system":" DEF"}
似乎认为一个属性source_system是一个元组,但我无法弄清楚为什么......可能我是盲人。
我使用json库得到与jsonpickle相同的结果,如示例
所示import json
import jsonpickle
class testclass(object):
def __init__(self,
_source_system = "",
_target_system = ""
):
self.source_system = _source_system,
self.target_system = _target_system
def to_JSON(self):
return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4)
# return jsonpickle.encode(self, unpicklable=False)
def main():
test = testclass(_source_system = 'ABC', _target_system='DEF')
print(test.to_JSON())
print(jsonpickle.encode(test, unpicklable=False))
print(jsonpickle.encode(test))
#============================================================================
if __name__ == '__main__':
main()
结果是:
{
"source_system": [
"ABC"
],
"target_system": "DEF"
}
{"source_system": ["ABC"], "target_system": "DEF"}
{"py/object": "__main__.testclass", "source_system": {"py/tuple": ["ABC"]}, "target_system": "DEF"}
为什么它认为source_system是一个元组并将其放在[]列表括号中?而且,为什么两个属性都不被处理/序列化?
答案 0 :(得分:0)
该行
self.source_system = _source_system,
有一个逗号,因此self.source_system
是一个元组。
答案 1 :(得分:0)
如 @fimnor 所述,删除__init__
函数中的逗号应该可以解决问题。 (可能他会在答案中发表评论,我的这里只是为了解释。)
class testclass(object):
def __init__(self,
_source_system = "",
_target_system = ""
):
self.source_system = _source_system,
self.target_system = _target_system
def to_JSON(self):
return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4)
# return jsonpickle.encode(self, unpicklable=False)
_source_system
中__init__
之后的逗号使其成为一个元组,因此它将转换为JavaScript数组。 self.source_system = _source_system,
与self.source_system = (_source_system,)
相同。