我需要知道一些是否可以通过这种方式从JSON创建对象:
让我们假设我有两个物体人类和动物,人类将拥有属性名称,年龄,性别和动物名称,腿部,颜色。
我将信息存储在MongoDb中,当我使用查询检索某些内容时,我会在Json中收到结果
human = {'name':'Bogdan','age':'21','sex':'male'}
animal = {'name':'Bob','legs':'4','colour':'brown'}
确定。现在它出现了问题..我想使用函数解码Json并从中创建对象,如下所示:
def object_decoder(object, jsonToConvert):
return object(**json.loads(jsonToConvert))
尝试抽象此功能是一种很好的做法,或者最好为每个对象模型创建一个object_decoder函数。
谢谢!
答案 0 :(得分:0)
确定
class Thing:
def __init__(self,**kwargs):
for k,v in kwargs.items():
setattr(self,k,v)
def __getitem__(self,item):
return self.__dict__.get(item,None)
def __repr__(self):
return "<Thing: %s>"%self.__dict__
Thing(**json.loads('{"name":"Bogdan","age":"21","sex":"male"}'))
实际上你可能不应该这样做......除非你有充分的理由。
当您想要将某些行为与状态数据一起封装时,通常会使用类。 当你只有数据时,字典就可以了(你的例子只是数据,所以在课堂上没有真正的意义)......
答案 1 :(得分:0)
无需解码,只需启用从dict
,或更好构建对象,如果可以 - 使用关键字作为您在mongo中使用的字段名称。
然后,只需使用:
import ast
class Human(object):
# same as mongo
def __init__(self, name=None, age=None, sex=None):
print name
print age
print sex
# you should be able to get these as dicts straight away...
human = {'name':'Bogdan','age':'21','sex':'male'}
human_obj = Human(**human)
我不确定你所映射的对象类型是什么,所以我添加了我的想法。如果你有一个词典 - 这是最好的。