从包含两个或多个json对象的文件中提取json

时间:2017-02-21 02:02:03

标签: python json python-3.x

有一个文件包含两个或多个json字符串,如下所示:

one

如何使用python将这些json字符串转换为此文件中的json对象?

1 个答案:

答案 0 :(得分:2)

您可以使用here分割每个}\W*{,同时保留括号,然后使用re.split转换结果中的每个项目:

import json
import re

s = '''{
"a":"1",
"b":"2"
}
{
"c":"3",
"d":"4"
}'''

res = [json.loads(g) for g in re.split(r'(?<=})\W*(?={)', s)]
print(res)

输出:

[{'b': '2', 'a': '1'}, {'c': '3', 'd': '4'}]

在上面的正则表达式中,(?<=})是一个正向的后向断言,只有当\W*紧跟}之后才会匹配。同样地,(?={)是积极的前瞻性断言,需要{关注\W*

更新或者,您可以使用json.loads查找匹配项而不是拆分字符串。它也适用于对象之间没有空格的情况:

import json
import re

s = '''{
"a":"1",
"b":"2"
}{
"c":"3",
"d":"4"
}
{
"foo":"bar"
}'''

res = [json.loads(m.group(0)) for m in re.finditer(r'({.*?}\W*(?=({|$)))', s, re.DOTALL)]
print(res)

输出:

[{'a': '1', 'b': '2'}, {'d': '4', 'c': '3'}, {'foo': 'bar'}]

请注意,如果您的JSON有一个} {字符串且中间有任意数量的空格,则上述两种方法都会中断。