ValueError:使用python导入json文件时出现额外数据错误

ValueError:使用python导入json文件时出现额外数据错误,python,json,mongodb,pymongo,Python,Json,Mongodb,Pymongo,我试图构建一个python脚本,将json文件导入MongoDB。对于较大的json文件,我的脚本的这一部分一直跳转到,除了ValueError。我认为这与逐行解析json文件有关,因为非常小的json文件似乎可以工作 def read(jsonFiles): from pymongo import MongoClient client = MongoClient('mongodb://localhost:27017/') db = client[args.db] counter = 0 f

我试图构建一个python脚本,将json文件导入MongoDB。对于较大的json文件,我的脚本的这一部分一直跳转到
,除了ValueError
。我认为这与逐行解析json文件有关,因为非常小的json文件似乎可以工作

def read(jsonFiles):
from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')
db = client[args.db]

counter = 0
for jsonFile in jsonFiles:
    with open(jsonFile, 'r') as f:
        for line in f:
            # load valid lines (should probably use rstrip)
            if len(line) < 10: continue
            try:
                db[args.collection].insert(json.loads(line))
                counter += 1
            except pymongo.errors.DuplicateKeyError as dke:
                if args.verbose:
                    print "Duplicate Key Error: ", dke
            except ValueError as e:
                if args.verbose:
                    print "Value Error: ", e

                    # friendly log message
            if 0 == counter % 100 and 0 != counter and args.verbose: print "loaded line:", counter
            if counter >= args.max:
                break
看看这个例子:

s = """{ "data": { "one":1 } },{ "1": { "two":2 } }"""
json.load( s )
它将产生json文件中的“额外数据”错误:

ValueError:额外数据:第1行第24列-第1行第45列(字符23-44)

这是因为这不是有效的JSON对象。它包含两个独立的“dict”,由冒号分隔。也许这可以帮助您在JSON文件中查找错误


您可以在中找到更多信息

找到了答案。看起来把它分成几行是个错误。下面是最终代码的样子

counter = 0
for jsonFile in jsonFiles:
    with open(jsonFile) as f:
        data = f.read()
        jsondata = json.loads(data)
        try:
            db[args.collection].insert(jsondata)
            counter += 1

该文件可能不是有效的
json
格式。因此,看起来我需要定义多个dict(我的json文件非常大,在某些点上有五个缩进级别),转储dict,将它们包装在列表中,然后转储列表。这在我的代码中会是什么样子?
counter = 0
for jsonFile in jsonFiles:
    with open(jsonFile) as f:
        data = f.read()
        jsondata = json.loads(data)
        try:
            db[args.collection].insert(jsondata)
            counter += 1