如何解析没有根元素的JSON字符串?

时间:2018-11-22 08:38:39

标签: python json python-3.x

我有一个如下所示的JSON文件:

{
  "name":"A",
  "age":19
}
{
  "name":"B",
  "age":20
}

因此,基本上该文件包含人员列表。

我尝试在Python 3中使用json.loads(str_content),但返回了错误json.decoder.JSONDecodeError: Extra data:

我检查了在线JSON解析器(http://json.parser.online.fr),它告诉了我同样的问题。

如何解析不带根元素但包含JSON对象列表的JSON文件?

2 个答案:

答案 0 :(得分:3)

问题是您要解析的字符串不是有效的JSON文档。它实际上是JSON文档的串联。因此简单的json.loads()将无法正常工作。

您可以改用基于https://docs.python.org/3/library/json.html#json.JSONDecoder.raw_decode的内容。例如:(代码有点难看,但逻辑应该清晰):

import json

s = """{
  "name":"A",
  "age":19
}
{
  "name":"B",
  "age":20
}"""

def iter_jsons(s):
    decoder = json.JSONDecoder()

    i = 0
    while True:
        doc, i2 = decoder.raw_decode(s[i:].strip())
        yield doc
        if i == i2:
            break
        i= i2

print(list(iter_jsons(s)))
  
    
      

[{'name':'A','age':19},{'name':'B','age':20}]

    
  

答案 1 :(得分:0)

这就像一种魅力

import json        
json_file = "myfile.json"

objects = json.load(open(json_file))

for person in objects:
    name = person['name']
    print(name)