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

Python 加载和解析包含多个JSON对象的JSON文件,python,json,file,jsonlines,Python,Json,File,Jsonlines,我正在尝试在中加载和解析JSON文件。但我在加载文件时遇到了麻烦: import json json_data = open('file') data = json.load(json_data) 收益率: ValueError:额外数据:第2行第1列-第225116行第1列(字符232-160128774) 我查看了Python文档,但是阅读这些看起来很糟糕的文档非常令人沮丧 前几行(使用随机条目匿名): {“投票”:{“有趣”:2,“有用”:5,“酷”:1},“用户id”:“harvey

我正在尝试在中加载和解析JSON文件。但我在加载文件时遇到了麻烦:

import json
json_data = open('file')
data = json.load(json_data)
收益率:

ValueError:额外数据:第2行第1列-第225116行第1列(字符232-160128774)
我查看了Python文档,但是阅读这些看起来很糟糕的文档非常令人沮丧

前几行(使用随机条目匿名):

{“投票”:{“有趣”:2,“有用”:5,“酷”:1},“用户id”:“harveydennis”,“姓名”:“Jasmine Graham”,“url”:http://example.org/user_details?userid=harveydennis“,“平均星级”:3.5,“审查次数”:12,“类型”:“用户”}
{“投票”:{“有趣”:1,“有用”:2,“酷”:4},“用户id”:“njohnson”,“姓名”:“Zachary Ballard”,“url”:”https://www.example.com/user_details?userid=njohnson“,“平均星级”:3.5,“审查次数”:12,“类型”:“用户”}
{“投票”:{“有趣的”:1,“有用的”:0,“酷的”:4},“用户id”:“david06”,“姓名”:“乔纳森·乔治”,“url”:”https://example.com/user_details?userid=david06“,“平均星级”:3.5,“审查次数”:12,“类型”:“用户”}
{“选票”:{“搞笑”:6,“有用”:5,“酷”:0},“用户id”:“圣地亚哥·里卡”,“姓名”:“阿曼达·泰勒”,“url”:”https://www.example.com/user_details?userid=santiagoerika“,“平均星级”:3.5,“审查次数”:12,“类型”:“用户”}
{“投票”:{“有趣”:1,“有用”:8,“酷”:2},“用户id”:“罗德里格斯·德尼斯”,“姓名”:“詹妮弗·罗奇”,“url”:”http://www.example.com/user_details?userid=rodriguezdennis“,“平均星级”:3.5,“审查次数”:12,“类型”:“用户”}
您有一个。您需要逐行解析文件:

import json

data = []
with open('file') as f:
    for line in f:
        data.append(json.loads(line))
每一行都包含有效的JSON,但作为一个整体,它不是有效的JSON值,因为没有顶级列表或对象定义

请注意,由于文件每行包含JSON,因此您可以省去一次性解析所有JSON或找出流式JSON解析器的麻烦。现在,您可以选择在继续下一行之前分别处理每一行,从而在处理过程中节省内存。如果文件很大,您可能不希望将每个结果附加到一个列表中,然后处理所有内容


如果您有一个包含单个JSON对象的文件,其中有分隔符,请使用缓冲方法解析出单个对象。

格式不正确。每行有一个JSON对象,但它们不包含在更大的数据结构(即数组)中。您需要对其进行重新格式化,使其以
[
开头,以
]
结尾,每行末尾加一个逗号,或者将其作为单独的词典逐行解析。

对于那些在这个问题上遇到困难的人:python
jsonlines
库(比这个问题年轻得多)优雅地处理每行一个json文档的文件。请参见

+1也许值得注意的是,如果您不需要同时使用所有对象,则逐个处理它们可能是更有效的方法。这样,您就不需要将整个数据存储在内存中,而只需要将其中的一部分存储在内存中。@Pi\ux:您将拥有一个字典,因此只需以键的形式访问字段:
data=json.loads(line);打印数据[u'voces']
@Pi\ux:打印json.loads()的结果,然后或使用调试器进行检查。@Pi\ux:否;不要将JSON格式与python dict表示混淆。您现在看到的是带字符串的python字典。@user2441441:请参阅此处的文章。对于50MB的文件,OP可能最好逐行处理数据。:-)文件是否格式错误取决于人们的观点。如果它打算采用“JSON行”格式,那么它是有效的。见: