在python中从JSON解码对象

在python中从JSON解码对象,python,json,Python,Json,我有一个类似这样的类: class Car: def __init__(self, name, colour, wheels): self.name = name self.colour = colour self.wheels = wheels 我想从JSON文件中创建上述类的对象,该文件如下所示,但有许多条目: "Cars":[ { "name": "Golf", "colour": "red", "wheels": 4, }, {

我有一个类似这样的类:

class Car:
def __init__(self, name, colour, wheels):
    self.name = name
    self.colour = colour
    self.wheels = wheels
我想从JSON文件中创建上述类的对象,该文件如下所示,但有许多条目:

  "Cars":[
  {
  "name": "Golf",
  "colour": "red",
  "wheels": 4,
  },
  {
  "name": "Up",
  "colour": "green",
  "wheels": 3,
  }
  ]

然后将它们添加到布局为{“name”:object}的字典中。我已经看过了不同的教程和示例,但大多数似乎是关于转储对象,而不是从中取出并重新创建对象

如果您的文件确保您总是拥有相同的顺序(名称、颜色、轮子)和相同的大小(3项),您可以使用以下内容:

class Car:
def __init__(self, name, colour, wheels):
    self.name = name
    self.colour = colour
    self.wheels = wheels
JSON文件(foo.JSON):

您可以使用
**
语法将字典转换为命名参数。基本上,它转换成这样一种称呼:
汽车(name=“法拉利”,color=“red”,wheels=“4”)
。所以你不必担心订单

如果您有一个列表,当然可以映射JSON结果:

raw = '[{...}, {...}]'
decoded = json.loads(raw)
cars = [Car(**d) for d in decoded]
print(cars)

JSON中
Cars
对象中的键有什么意义吗?例如,第二个对象的键为
Robin
,是否应该使用该键执行任何操作?谢谢您的评论。不,这只是多余的垃圾——我可能更容易在JSON文件中编辑出来,所以我会修改这个例子。你自己尝试过什么吗?你知道如何实例化类和如何索引字典吗?或者,这两件事中有一件会让你绊倒吗?此外,您修改的示例JSON无效。您应该将
Cars
值更改为列表而不是对象(例如
[
而不是
{
)。这看起来不错,但我尝试从外部JSON文件加载-我尝试过修改它,但得到:ValueError:没有JSON对象可以解码任何想法?
JSON.load(open(“filename.JSON”))
然后。确保您的json有效。在web上搜索json验证器。json中不允许使用交易逗号。请在车轮计数后将其删除。尝试此操作后,获得了“TypeError:type object argument after**必须是映射,而不是unicode”-我已使用JSONlint进行验证并删除了有问题的逗号,但错误仍然存在耳朵。显然,您使用的
**
变量包含字符串(Unicode),而不是字典。您是否使用
.values()
.items()在
解码[“Cars”]
字典上迭代
正确吗?这很好,谢谢你,不幸的是我有很多不同的车要循环,如何最好地将其放入循环中?
raw = '[{...}, {...}]'
decoded = json.loads(raw)
cars = [Car(**d) for d in decoded]
print(cars)