虽然我发现了很多关于正则表达式和JSON的主题,但我看不到隧道的结束。这是关于使用python在日志文件中查找JSON元素(它在Splunk中)。
有人发现以JSON表示法记录对象是个好主意:
以下是这些例子。
m1='''[][{st=82, fl=FX}][][][][][][][][] nnn {"1":"A"} mmm'''
m2='''[][][{st=82, fl=FX}][][][][][][][] nnn {"1":"A"} xxx {"2":"B"} mmm'''
m3='''[][][][{st=82, fl=FX}][][][][][][] nnn [{"1":"A"},{"2":"B"}] mmm'''
m4='''[][][][][{st=82, fl=FX}][][][][][] nnn {"1":"A"} aaa [{"2":"B"},{"3":"C"}] mmm'''
m5='''[][][][][][{st=82, fl=FX}][][][][] nnn [{"1":"A"},{"2":"B"}] bbb {"3":"C"} mmm'''
m6='''[][][][][][][{st=82, fl=FX}][][][] nnn [{"1":"A"},{"2":"B"}] ccc [{"3":"C"},{"4":"D","5":"E"}] mmm'''
我打算删除每个JSON对象,并使用Python中的json.dumps()
替换它的漂亮打印。
该行的其余部分需要保持不变,即标题和任何额外的文本。
一气呵成似乎是不可能的。所以我尝试进行两次迭代,第一次替换JSON数组,第二次迭代完成剩下的工作。像这样:
m=m6
for match in re.finditer('(\[{.*?}\])',m):
print json.dumps(match.group(1) , sort_keys=False,
indent=4, separators=(',', ': '))
for match in re.finditer('({.*?})',m):
print json.dumps(match.group(1), sort_keys=False,
indent=4, separators=(',', ': '))
我遇到了这些问题:
获得:
"[{\"3\":\"C\"},{\"4\":\"D\",\"5\":\"E\"}]"
预期:
[
{
"3": "C"
},
{
"4": "D",
"5": "E"
}
]
这样就可以了:
print json.dumps([{"3":"C"},{"4":"D","5":"E"}], sort_keys=False,
indent=4, separators=(',', ': '))