在python中动态地从Json创建对象

时间:2014-12-19 23:12:46

标签: python json mongodb decode

我需要知道一些是否可以通过这种方式从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函数。

谢谢!

2 个答案:

答案 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)

我不确定你所映射的对象类型是什么,所以我添加了我的想法。如果你有一个词典 - 这是最好的。