我在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;作为一个独立的词典,我可以访问这些值。任何帮助表示赞赏!