复杂的json到python对象

复杂的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

我正在尝试将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

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序列化有什么问题?