有包含兩個或更多的JSON字符串像這樣的文件:提取JSON其中包含兩個或兩個以上的JSON對象
{
"a":"1",
"b":"2"
}
{
"c":"3",
"d":"4"
}
如何使用Python這些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