提取JSON其中包含两个或两个以上的JSON对象
问题描述:
有包含两个或更多的JSON字符串像这样的文件:提取JSON其中包含两个或两个以上的JSON对象
{
"a":"1",
"b":"2"
}
{
"c":"3",
"d":"4"
}
如何使用Python这些JSON字符串从该文件转换成JSON对象?
答
您可以使用re.split
同时保留括号分裂的}\W*{
每次出现,然后每个项目转换的结果与json.loads
:
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'}]
在上述正则表达式(?<=})
是正向lookbehind断言,导致\W*
只有在紧接着}
之前匹配。类似地,(?={)
是肯定前瞻断言,其要求{
遵循\W*
。
更新或者,您可以使用re.finditer
来查找匹配而不是拆分字符串。它还将在的情况下工作,那里的对象之间没有空格:
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有} {
与任何字符串上面将打破两者之间的空白量。
我会修复如何创建该文件以生成有效的JSON –
这些不是有效的JSON对象,因为这些值之间没有逗号。 – niemmi
@ cricket_007对不起,我忘记了!我现在修复它 – Guo