如何从JSON对象中提取Python对象?

时间:2017-09-25 12:35:34

标签: python json

我能够从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

1 个答案:

答案 0 :(得分:0)

我看到的最简单的可重用解决方案包括两个步骤:

  1. 将json解析回python字典(这会处理类型转换),并且可以在类的构造函数之外完成
  2. 可选择将python词典输入您班级的构造函数中,并在指定时使用它来填充您的班级字段setattr
  3. 以下是与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...