是否可以在python中使用json.loads()
来创建实际的Python对象而不是dict值?
我宁愿不必json_data['value_name']
而只是json_object.my_value
。
答案 0 :(得分:-1)
您可以使用Python替代语法来创建类型:
attributes = {
'a': 12,
'b': 'there-is-a-value-here',
'greet': (lambda self: print("Hi, my a is {}".format(self.a)))
}
SomeCoolType = type("SomeCoolType", (), attributes)
someCoolInstance = SomeCoolType()
someCoolInstance.greet() # this prints "Hi, my a is 12"
第一个参数是类型名称,第二个参数是带有父类的元组,第三个参数是属性字典。因此,考虑到这一点,您可以先将JSON解码为dict,然后从中构造一个类型,然后实例化它:
d = json.loads(json_data)
T = type("JSON", (), d)
json_object = T()
或者,更短:
json_object = type("JSON", (), json.loads(json_data))()
这种简单的方法只会将顶级字典更改为对象;如果你想能够调用json_object.param.something.value
,你必须通过递归转换它(类似于浅版和深版):
def to_object(dictionary):
for key, value in dictionary.items():
if isinstance(value, dict): dictionary[key] = value
return type("JSON", (), dictionary)
json_object = to_object(json.loads(json_data))