我正在尝试构建一个将json文件导入MongoDB的python脚本。我的脚本的这一部分不断跳转到except ValueError
以获取更大的json文件。我认为它与逐行解析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
我收到以下错误消息:
Value Error: Extra data: line 1 column 10 - line 2 column 1 (char 9 - 20)
Value Error: Extra data: line 1 column 8 - line 2 column 1 (char 7 - 18)
答案 0 :(得分:4)
看看这个例子:
s = """{ "data": { "one":1 } },{ "1": { "two":2 } }"""
json.load( s )
它会产生“额外数据”错误,就像你的json文件一样:
ValueError:额外数据:第1行第24行 - 第1行第45列(字符23 - 44)
这是因为这不是有效的JSON对象。它包含两个独立的“dict”,用冒号分隔。也许这可以帮助您在JSON文件中找到错误。
<{3>}在this post中您可以找到更多信息。答案 1 :(得分:2)
想出来。看起来像是把它分成几行是错误的。这是最终代码的样子。
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