JSON dict对象没有Python中的key,val配对

时间:2017-03-08 23:33:36

标签: json python-3.x

我在python3中使用JSON时遇到了新的问题并遇到了一个我无法在SO或google上找到的问题。我有一个程序可以读取一个JSON文件,该文件是这样编写的:

[
{
    "message": {
        "Y": "15",
        "datetime": "2016-05-31 09:00:00",
        "X": "174",
        "proxCard": "vlagos001",
        "type": "mobile-prox",
        "floor": "1"
    },
    "offset": 32400.0
},
{
    "message": {
        "Y": "15",
        "datetime": "2016-05-31 09:00:00",
        "X": "174",
        "proxCard": "vlagos001",
        "type": "mobile-prox",
        "floor": "1"
    },
    "offset": 32400.0
}, 
.
.
etc
]

我的程序读入文件,在其上调用json.load(),然后尝试遍历每个项目并获取某些变量,然后对它们进行操作。但是我在处理文件时遇到了困难,并且在检查每个var的类型时遇到了一些我不明白的事情。

以下代码用于获取每种类型的项目。

input = open(file)
data = json.load(input)
print(type(data)) #returns <class 'list'>
for obj in data:
    print(type(obj))  #returns <class 'dict'>
    print(obj)
    for key in obj:
        print(type(key))  #returns <class 'str'>
        print(key)
    break

运行一次,上面的代码返回:

<class 'list'>
<class 'dict'>
{'offset': 32400.0, 'message': {'floor': '1', 'type': 'mobile-prox', 'datetime': '2016-05-31 09:00:00', 'X': '174', 'proxCard': 'vlagos001', 'Y': '15'}}
<class 'str'>
offset
<class 'str'>
message

如您所见,data var是dicts的列表。但是,当我尝试从每个对象中获取键和值对时,如下所示:

for obj in data:
    print(type(obj))  #returns <class 'dict'>
    print(obj)
    for key, val in obj:
        print(type(key))
        print(type(val))
        print(key)
        print(val)
     break

我收到一条错误,说它无法解压缩值,就好像它不是一个字典:

<class 'list'>
<class 'dict'>
{'message': {'type': 'mobile-prox', 'proxCard': 'vlagos001', 'X': '174', 'floor': '1', 'datetime': '2016-05-31 09:00:00', 'Y': '15'}, 'offset': 32400.0}
Traceback (most recent call last):
  File "data_analysis.py", line 89, in <module>
    main()
  File "data_analysis.py", line 82, in main
    AnalyzeMobileProx(data)
  File "data_analysis.py", line 17, in AnalyzeMobileProx
    for key, val in obj:
ValueError: too many values to unpack (expected 2)

有人可以解释为什么会这样吗?根据我的理解,每个对象都被视为一个字典,并且应该有key, val对,一个键是&#34; message&#34;和#34;偏移&#34;,用&#34;消息&#34;作为一个独立的词典,我可以访问这些值。任何帮助表示赞赏!

0 个答案:

没有答案