我在 json 文件中有 10,000 个 json 对象,格式如下:
{ "a": 1,
"b" : 2,
"c" : {
"d":3
}
}{ "e" : 4,
"f" : 5,
"g" : {
"h":6
}
}
如何将它们作为 json 对象加载?
我尝试过的两种方法都出现了相应的错误:
方法一:
>>> with open('test1.json') as jsonfile:
... for line in jsonfile:
... data = json.loads(line)
...
错误:
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.5/json/decoder.py", line 355, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 1 (char 10)
方法二:
>>> with open('test1.json') as jsonfile:
... data = json.load(jsonfile)
...
错误:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/usr/lib/python3.5/json/__init__.py", line 268, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.5/json/decoder.py", line 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 7 column 1 (char 46)
>>>
我已经阅读了相关问题,但都没有帮助。
请您参考如下方法:
您描述的文件内容不是有效的 JSON 对象,这就是机器人方法不起作用的原因。
要转换为可以使用 json.load(fd) 加载的内容,您必须:
- 在文件开头添加
[ - 在每个对象之间添加一个
, - 在文件末尾添加
]
那么就可以使用方法二了。 例如:
[ { "a": 1,
"b" : 2,
"c" : {
"d":3
}
}, { "e" : 4,
"f" : 5,
"g" : {
"h":6
}
}
]
是一个有效的 JSON 数组
如果文件格式与您描述的完全一样,您可以这样做
with open(filename, 'r') as infile:
data = infile.read()
new_data = data.replace('}{', '},{')
json_data = json.loads(f'[{new_data}]')
