复杂的json到python对象
我正在尝试将python字符串转换回对象, 问题是我的对象中包含其他对象 我不知道如何重建obj(称为配置) 该守则的简化版本如下: 子类:复杂的json到python对象,python,json,Python,Json,我正在尝试将python字符串转换回对象, 问题是我的对象中包含其他对象 我不知道如何重建obj(称为配置) 该守则的简化版本如下: 子类: import json CONFIG_FILE_NAME = 'config.xml' class POI: def __init__(self, X, Y, W, H): self.x = X self.y = Y self.w = W self.h = H cla
import json
CONFIG_FILE_NAME = 'config.xml'
class POI:
def __init__(self, X, Y, W, H):
self.x = X
self.y = Y
self.w = W
self.h = H
class Mask:
def __init__(self, X, Y):
self.x = X
self.y = Y
保存为json的包含类:
class configuration:
def __init__(self, str = None):
if str == None:
self.POIs = []
self.Masks = []
else:
#str to obj#
self.__dict__=json.loads(str)
def toJason(self):
return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True)
这就是我保存和加载的方式:
def LoadConfig():
file = open(CONFIG_FILE_NAME, 'r')
str = file.read()
conf = configuration(str)
file.close()
return conf
def SaveConfig(conf):
file = open(CONFIG_FILE_NAME, 'w+')
str = conf.toJason()
file.write(str)
file.close()
问题是:
#Test#
x = LoadConfig()
print("Test 1:")
print(x.POIs)
print("Test 2:")
print(x.POIs.x) #using x.POIs['x'] will work but it should work not as dictionary as configuration().POIs.x works
输出:
Test 1:
[{u'y': 0, u'h': 0, u'x': 0, u'w': 0, u'index': 0}]
Test 2:
Traceback (most recent call last):
File "/home/pi/Desktop/tracker/Configure/test.py", line 47, in <module>
print(x.POIs.x)
AttributeError: 'list' object has no attribute 'x'
测试1:
[{u'y':0,u'h':0,u'x':0,u'w':0,u'index':0}]
测试2:
回溯(最近一次呼叫最后一次):
文件“/home/pi/Desktop/tracker/Configure/test.py”,第47行,在
打印(x.POIs.x)
AttributeError:“列表”对象没有属性“x”
子类似乎没有反序列化
我希望问题很清楚,你能帮助我。
谢谢大家! 你能发布一下
config.xml
的内容吗?或者是导致相同问题的内容的广义版本。x.POIs
是一个列表,因此它永远不会有.x
属性,x.POIs[0]
是有问题的一个。当然,子类没有反序列化,当您将其序列化为普通字典时,不要做任何事情将其放回POI
对象,它最终将成为普通字典。要返回对象,你应该考虑在这里:BTW,<代码>杰森<代码>是某人的名字。code>JSON是数据格式。不管怎样,保持XML序列化有什么问题吗?请发布config.XML
的内容好吗?或者是导致相同问题的内容的广义版本。x.POIs
是一个列表,因此它永远不会有.x
属性,x.POIs[0]
是有问题的一个。当然,子类没有反序列化,当您将其序列化为普通字典时,不要做任何事情将其放回POI
对象,它最终将成为普通字典。要返回对象,你应该考虑在这里:BTW,<代码>杰森<代码>是某人的名字。code>JSON是数据格式。不管怎样,保持XML序列化有什么问题?