我正在尝试从长字符串中检索所有类似字典的JSON。 例如,
{"uri": "something"} is referencing {"link": "www.aurl.com"}
我希望获得{"uri": "something"}
和{"link": "www.aurl.com"}
作为结果。有没有办法在python中使用正则表达式?
答案 0 :(得分:1)
可能是最好的"这样做的方法是让真正的JSON解码器完成工作,而不是使用可怕的正则表达式。找到所有打开的大括号"可能的对象起点",然后尝试使用JSONDecoder
的raw_decode
方法解析它们(返回解析的对象和消耗的字符数)成功后,可以有效地跳过成功解析的对象)。例如:
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))
。