我遇到了一个问题,我似乎无法找到解决方案。我有一个通过 JSON 与 Java 应用程序通信的应用程序。非常简单,但我在使用嵌套对象解码 JSON 时遇到问题。例如我有:
class obj1(object):
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
def __eq__(self, other):
return (isinstance(other, obj1) and
self.var1 == obj1.var1 and
self.var2 == obj2.var2)
class obj2(object):
def __init__(self, v1, v2, obj1):
self.v1 = v1
self.v2 = v2
self.obj1 = obj1
我想序列化和反序列化“obj2”类,我可以很容易地创建它:
myObj1 = obj1(1,2)
myObj2 = obj2(3.14, 10.05, myObj1)
当我想发送 Json 时,这显然非常简单:
import json
def obj_to_dict(obj):
return obj.__dict__
my_json = json.dumps(myObj2, default=obj_to_dict)
这将创建我所期望的完美 JSON:
{"obj1": {"var1": 1, "var2": 2}, "v1": 3.14, "v2": 10.05}
我遇到的问题是将这个字符串编码回两个对象。我无法添加任何额外的类型信息,因为发送回此架构的应用程序正是以这种方式将其发送回。所以当我尝试从字典中重建它时:
obj_dict = json.loads(my_json)
myNewObj = obj2(**obj_dict)
不太好用
print myNewObj.obj1 == obj1 #returns False.
是否有更好的方法从 JSON -> 自定义对象获取? (实际上,我有大约 20 个自定义对象嵌套在另一个对象中。对象 -> JSON 工作完美,它只是走向另一个方向。有什么想法吗?
最佳答案
您需要“链接”对象创建。
类 obj2(对象):
def __init__(自身, v1, v2, obj1):
自身.v1 = v1
自身.v2 = v2
如果 type(obj1) 是字典:
self.obj1 = obj1(**obj1)
别的:
自身.obj1 = obj1
关于python - 在Python中解码JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656112/