我有一个带有两个json对象列表的大json文件。
示例数据:
data.json
[{"a":1}][{"b":2}]
解析器
import json
message = json.load(open("data.json"))
for m in message:
print m
不出所料,我得到ValueError。
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 290, in load
**kw)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 369, in decode
raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 10 - line 1 column 19 (char 9 - 18)
我想到了通过跟踪字符数来分割文件。
处理此问题的pythonic方法是什么?
最佳答案
您可以使用json.JSONDecoder.raw_decode()
来解析一个完整的对象,并返回其结尾处的字符位置,从而允许您遍历每个对象:
from json import JSONDecoder, JSONDecodeError
decoder = JSONDecoder()
data = '[{"a":1}][{"b":2}]'
pos = 0
while True:
try:
o, pos = decoder.raw_decode(data, pos)
print(o)
except JSONDecodeError:
break
结果:
[{'a': 1}]
[{'b': 2}]
关于python - Python使用json加载来解析具有两个json对象列表的文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54915420/