import json
def get_all_json(teststr):
decoder = json.JSONDecoder()
# Find first possible JSON object start point
sliceat = teststr.find('{')
while sliceat != -1:
# Slice off the non-object prefix
teststr = teststr[sliceat:]
try:
# See if we can parse it as a JSON object
obj, consumed = decoder.raw_decode(teststr)
except Exception:
# If we couldn't, find the next open brace to try again
sliceat = teststr.find('{', 1)
else:
# If we could, yield the parsed object and skip the text it was parsed from
yield obj
sliceat = consumed
这是一个生成器函数,因此您可以逐个迭代对象,例如for obj in get_all_json(mystr):,或者如果您需要它们同时用于索引、多次迭代等等,all_objs = list(get_all_json(mystr))。在
实现这一点的“最佳”方法可能是让真正的JSON解码器完成工作,而不是使用糟糕的regex。找到所有打开的大括号作为“可能的对象起点”,然后尝试用^{} 的^{} 方法解析它们(它返回解析的对象和成功时消耗的字符数,从而可以有效地跳过成功解析的对象)。例如:
这是一个生成器函数,因此您可以逐个迭代对象,例如
for obj in get_all_json(mystr):
,或者如果您需要它们同时用于索引、多次迭代等等,all_objs = list(get_all_json(mystr))
。在相关问题 更多 >
编程相关推荐