[英]Creating python object from json
我有带有此类信息的json文件
{
"cars" : [{
"model" : " BMW",
"gas" : 100,
},
{
"model" : "LADA",
"gas" : 150
},
{
"model" : "SUZUKI",
"gas" : 70
}]
}
和下课
class GasCar(Car):
def __init__(self, model=None, gas=None):
super(GasCar, self).__init__()
self.gas = gas
self.model = model
如何创建类对象并将数据从json传输到类实例?
我试过了
car = GasCar()
s = json.dumps(car)
s = json.dumps(car.__dict__)
您的JSON无法由python json
模块解析,因为末尾的逗号为100,
如果要解决此问题100,
可以参考此答案。 但是假设json如下:
import json
class GasCar():
def __init__(self, model=None, gas=None):
super(GasCar, self).__init__()
self.gas = gas
self.model = model
cars = """{
"cars" : [{
"model" : "BMW",
"gas" : 100
},
{
"model" : "LADA",
"gas" : 150
},
{
"model" : "SUZUKI",
"gas" : 70
}]
}"""
json_cars = json.loads(cars)
cars = json_cars["cars"] # gets "cars" list
您可以创建一个汽车对象,如下所示:
car_object1 = GasCar(cars[0]["model"], cars[0]["gas"])
print(car_object1.model) # prints "BMW"
或者,如果您想要所有汽车的清单:
car_objects = [GasCar(car["model"], car["gas"]) for car in cars]
您可以使用json.loads
( Docs )将JSON对象读入字典,然后将字典作为构造函数传递给您的类。 让我知道是否需要更多说明。
我喜欢一种更通用的方式来完成这项工作。 即时将python对象粘合在一起,并将其序列化为json,反之亦然,获得JSON字符串,然后从中创建一个“ Value-Container”对象(没有方法等)-我想知道程序员如何在没有:-的情况下生活
也许不是世界上最好的代码,请提出您的建议,但我现在已经这样做了7年(也可以在jython中运行,性能也可以):(请调试以查看“ po1”的结构)在末尾):
# coding: UTF-8
import json
import types
def obj2dict(pp):
if type(pp) is types.TupleType:
olist=[]
for p in pp:
olist.append(obj2dict(p))
return tuple(olist)
if type(pp) is types.ListType:
olist=[]
for p in pp:
olist.append(obj2dict(p))
return olist
if type(pp) is types.DictionaryType:
odict={}
for k,val in pp.items():
odict[k]=obj2dict(val)
return odict
if type(pp) is types.InstanceType:
odict={}
for m in pp.__dict__:
val=getattr(pp,m)
odict[m]=obj2dict(val)
return odict
for m in dir(pp):
if not m.startswith("_"):
val=getattr(pp,m)
odict[m]=obj2dict(val)
return odict
return pp
class CONT:pass
def toFloat(inp):
return float(inp.replace(",","."))
def dict2obj(pp):
if type(pp) is types.ListType:
olist=[]
for p in pp:
olist.append(dict2obj(p))
return olist
if type(pp) is types.DictionaryType:
oinst=CONT()
for (k,v) in pp.items():
val=dict2obj(v)
setattr(oinst,k,val)
return oinst
try:
pp=toFloat(pp)
except:pass
return pp
def dumps(pp):
return json.dumps(obj2dict(pp)) #,ensure_ascii=False)
def loads(pp):
return dict2obj(json.loads(pp)) #,ensure_ascii=False))
if __name__ == "__main__":
jstring="""{
"cars" : [{
"model" : " BMW",
"gas" : 100
},
{
"model" : "LADA",
"gas" : 150
},
{
"model" : "SUZUKI",
"gas" : 70
}]
}"""
po1=loads(jstring)
po=CONT()
po.model="Toyota"
po.gas=88
print dumps(po)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.