我有带有此类信息的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__)
答案 0 :(得分:1)
由于json
中的结尾逗号,因此Python 100,
模块无法解析您的JSON,如果要解决此问题,可以参考this答案。
但是,假设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]
答案 1 :(得分:0)
您可以使用json.loads
(Docs)将JSON对象读入字典,然后将字典作为构造函数传递给您的类。让我知道是否需要更多说明。
答案 2 :(得分:0)
我喜欢一种更通用的方式来完成这项工作。快速地将python对象粘合在一起,并将它们序列化为json,反之亦然,得到一个JSON字符串,然后从中创建一个“ Value-Container”对象(没有方法等)-我想知道程序员如何在没有:-)的情况下生活? / p>
也许不是世界上最好的代码,请提出您的建议,但我现在已经这样做了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)