我想将已解析的json数据转换为python对象。
这是我的json格式:
{
"Input":{
"filename":"abg.png",
"fileSize":123456
},
"Output":{
"filename":"img.png",
"fileSize":1222,
"Rect":[
{
"x":34,
"y":51,
"width":100,
"height":100
},
{
"x":14,
"y":40,
"width":4,
"height":6
}]
}
}
我试图创建一个名为Region的类
class Region:
def __init__(self, x, y, width, height):
self.x=x
self.y=y
self.width=width
self.height=height
def __str__(self):
return '{{"x"={1}, "y"={2}, "width"={3}, "height"={4}}'.format(self.left, self.top, self.width, self.height)
def obj_creator(d):
return Region(d['x'], d['y'], d['width'], d['height'])
然后我尝试使用object_hook函数将数据加载到对象中
for item in data['Output']['Rect']:
region = json.loads(item, object_hook=obj_creator)
但是我发现它说了这个错误
TypeError: the JSON object must be str, bytes or bytearray, not 'dict'
实际上,如果我的数据未嵌套,我知道如何将对象分配给python对象。但是我无法使用嵌套的json数据执行此操作。有什么建议吗?
谢谢。
答案 0 :(得分:5)
看起来您的JSON实际上是字典。
由于dict属性和实例属性具有相同的名称,因此可以轻松地创建Region
的实例,方法是将dict item
与两个**
拆包:
regions = []
for item in data['Output']['Rect']:
regions.append( Region(**item) )
for region in regions:
print( region )
输出:
{"x"=34, "y"=51, "width"=100, "height"=100}
{"x"=14, "y"=40, "width"=4, "height"=6}
(我将您的__str__
更改为:)
def __str__(self):
return '{{"x"={}, "y"={}, "width"={}, "height"={}}}'.format(self.x, self.y, self.width, self.height)