我正在尝试在Python中加载和解析JSON文件。但是我一直试图加载文件:
import json
json_data = open('file')
data = json.load(json_data)
收率:
ValueError: Extra data: line 2 column 1 - line 225116 column 1 (char 232 - 160128774)
我在Python文档中查看了 18.2. json
— JSON encoder and decoder ,但阅读这些看起来很糟糕的文档非常令人沮丧。
答案 0 :(得分:184)
你有JSON Lines format text file。您需要逐行解析文件:
import json
data = []
with open('file') as f:
for line in f:
data.append(json.loads(line))
每个行包含有效的JSON,但总体而言,它不是有效的JSON值,因为没有顶级列表或对象定义。
请注意,因为该文件每行包含JSON,所以您可以一次性尝试解析它或者找出流式JSON解析器。您现在可以选择单独处理每一行,然后再继续下一步,在此过程中节省内存。您可能不希望将每个结果附加到一个列表中,然后然后处理所有内容,如果您的文件非常大。
如果您的文件包含具有中间分隔符的单个JSON对象,请使用How do I use the 'json' module to read in one JSON object at a time?使用缓冲方法解析单个对象。
答案 1 :(得分:5)
格式错误。每行有一个JSON对象,但它们不包含在更大的数据结构(即数组)中。您需要重新格式化它,使其以[
开头,并以]
结尾,并在每行末尾加上逗号,或逐行解析为单独的词典。
答案 2 :(得分:4)
对于那些在这个问题上磕磕绊绊的人:python jsonlines
库(比这个问题要年轻得多)优雅。每行处理一个json文档的文件。见https://jsonlines.readthedocs.io/
答案 3 :(得分:0)
如果您正在使用 pandas
并且您有兴趣将 json
文件加载为数据框,您可以使用:
import pandas as pd
df = pd.read_json('file.json', lines=True)
并将其转换为json数组,您可以使用:
df.to_json('new_file.json')