提取JSON其中包含两个或两个以上的JSON对象

问题描述:

有包含两个或更多的JSON字符串像这样的文件:提取JSON其中包含两个或两个以上的JSON对象

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

如何使用Python这些JSON字符串从该文件转换成JSON对象?

+1

我会修复如何创建该文件以生成有效的JSON –

+0

这些不是有效的JSON对象,因为这些值之间没有逗号。 – niemmi

+0

@ cricket_007对不起,我忘记了!我现在修复它 – Guo

您可以使用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有} {与任何字符串上面将打破两者之间的空白量。

+0

谢谢!我知道了! – Guo

+0

如何匹配'} {'使用正则表达式?我使用're.split(r'(? Guo

+0

@Guo'} {'**是**的表达。 –