Python 解析由多个JSON对象一起运行组成的字符串

Python 解析由多个JSON对象一起运行组成的字符串,python,Python,给定如下字符串: str= "{"Months": "12", "details":["id": "a123a", "text": "something, somethingelse, againwiththesomething", "value": "-2536"}, {"comment"

给定如下字符串:

str= "{"Months": "12", "details":["id": "a123a", "text": "something, somethingelse, againwiththesomething", "value": "-2536"}, {"comment": "something", "value": "6500", "id": "abc123"}], "Date": "2017-12-31"}
{"Months": "9", "details":["id": "foo", "text": "something, somethingelse, againwiththesomething", "value": "-656"}, {"comment": "something", "value": "9800", "id": "bar"}], "Date": "2017-12-31"}
{"Months": "12", "details":["id": "woo", "text": "something, somethingelse, againwiththesomething", "value": "3776"}, {"comment": "something", "value": "600", "id": "tar"}], "Date": "2017-12-31"}"
您会注意到其中有3个单独的Json结构,但它们之间没有用
分隔。并不是说可以有任意数量的JSON部分,在这个示例中,我只列出了3个,但是可以有任意数量的JSON部分

有没有一种方法可以正确地在python中解析它,并将其全部输出为有效的逗号分隔JSON

我试过:

decoder = JSONDecoder()
pos = 0
while True:
    result, pos = decoder.raw_decode(str, pos)
    print(result)
以及:

result = json.loads(str)
但两者都不起作用


Python函数是否可以实现这一点?

您可以使用正则表达式将
}{
(两个对象之间的“间隙”)替换为
},{
。然后您可以将整个内容包装在
[]
中,并将其作为列表进行解析

import re
import json

data = re.sub(r'}\s*?{', '},{', str)
result = json.loads('[' + data + ']')

首先,您的示例不是有效的json结构(可能应该是字典列表),并且有一个输入错误:

 "details":["id": "a123a",
如果您解决了这个问题,您可以尝试执行以下操作:

import json

fixed_str = """{"Months": "12", "details":[{"id": "a123a", "text": "something, somethingelse, againwiththesomething", "value": "-2536"}, {"comment": "something", "value": "6500", "id": "abc123"}], "Date": "2017-12-31"}
{"Months": "9", "details":[{"id": "foo", "text": "something, somethingelse, againwiththesomething", "value": "-656"}, {"comment": "something", "value": "9800", "id": "bar"}], "Date": "2017-12-31"}
{"Months": "12", "details":[{"id": "woo", "text": "something, somethingelse, againwiththesomething", "value": "3776"}, {"comment": "something", "value": "600", "id": "tar"}], "Date": "2017-12-31"}"""

result = [json.loads(x) for x in fixed_str.splitlines()]

这些json对象是否总是像您的示例一样在自己的行上?它们似乎由一个换行符分隔,只需在
\n
no上拆分?如果json对象之间有换行符,那么您拥有的是某种格式的东西,处理它的简单方法是调用
json.loads()
在输入的每一行上。还有一个名为的第三方模块,您可以尝试。这很有效,谢谢