如何在python中查找长字符串中的所有字典

时间:2015-09-15 16:04:32

标签: python json string parsing

我正在尝试从长字符串中检索所有类似字典的JSON。 例如,

{"uri": "something"} is referencing {"link": "www.aurl.com"}

我希望获得{"uri": "something"}{"link": "www.aurl.com"}作为结果。有没有办法在python中使用正则表达式?

1 个答案:

答案 0 :(得分:1)

可能是最好的"这样做的方法是让真正的JSON解码器完成工作,而不是使用可怕的正则表达式。找到所有打开的大括号"可能的对象起点",然后尝试使用JSONDecoderraw_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))