我能够从Python对象中获取JSON字符串:
def myserialize(obj):
return obj.__dict__
class A:
def __init__(self):
self._filename = AString()
self._size = AnInt()
self.objectString = ObjectContainingAString()
self.arrayOfObject = ....
def get_json_string(self):
return json.dumps(self.__dict__,default=myserialize,indent=4,sort_keys=True)
JSON输出如下所示
{
"_filename" : "value_of_string"
"_size" : value_of_int
"objectString": {
"string" : "value_of_string"
}
"arrayOfObject" : [
{
"obj1" : {
...
}
},
{
"obj2"...
}
]
}
这正是我想要的!一种简单的方法来转换Python"复杂"对象为JSON字符串。
问题: 但是现在,我想把这个字符串转换成相同的"复杂的" Python对象!
情境: 场景是我有一些(不同的)"复杂"我想要从JSON字符串来回转换的对象。
如果您提供的解决方案必须在字符串中包含一个ID,以某种方式声明"这是一个仅用于XYZ类型的对象的JSON字符串"因为我只有一些"复杂的"对象(5/6)。
编辑1
完整方案:我有6个包含嵌入式软件配置的二进制文件。这显然不是人类可读的。
我目前正在使用Python来解析二进制文件并提取其内容以获得人类可读的版本。 (JSON或其他东西!)JSON至少具有将Python对象转换为包含一行中一个配置文件的所有信息的优势。
人们现在应该能够在(JSON或其他)文本配置文件中编辑一些值。
我希望能够将文本文件转换回相应的Python对象,并将其序列化以获取修改后的二进制文件!
END OF EDIT
答案 0 :(得分:0)
我看到的最简单的可重用解决方案包括两个步骤:
setattr
以下是与python代码相同的想法:
class A:
def __init__(self, input_dict=None):
if input_dict is not None:
for k, v in input_dict.items():
setattr(self, k, v)
else:
self._filename = AString()
self._size = AnInt()
self.objectString = ObjectContainingAString()
self.arrayOfObject = ....
...
# Assume we have a list of json strings created by your json export
# Now parse json strings and turn them into objects of class A
for json_str in json_strs:
new_object = A(input_dict=json.loads(json_str))
# Do something with new_object...