在Python中加载和解析包含多个JSON对象的JSON文件

时间:2012-09-16 23:00:57

标签: python json jsonlines

我正在尝试在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 ,但阅读这些看起来很糟糕的文档非常令人沮丧。

4 个答案:

答案 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')