有一个文件包含两个或多个json字符串,如下所示:
one
如何使用python将这些json字符串转换为此文件中的json对象?
答案 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有一个} {
字符串且中间有任意数量的空格,则上述两种方法都会中断。