【问题标题】:How can I ensure that my Python regular expression outputs a dictionary?如何确保我的 Python 正则表达式输出字典?
【发布时间】:2011-04-27 05:59:35
【问题描述】:

我正在使用 Beej 的 Python Flickr API 向 Flickr 请求 JSON。 Flickr 返回的未解析字符串如下所示:

jsonFlickrApi({'photos': 'example'})

我想以字典的形式访问返回的数据,所以我有:

photos = "jsonFlickrApi({'photos': 'test'})"

# to match {'photos': 'example'}
response_parser = re.compile(r'jsonFlickrApi\((.*?)\)$')
parsed_photos = response_parser.findall(photos)

但是,parsed_photos 是一个列表,而不是字典(根据 type(parsed_photos)。它的输出如下:

["{'photos': 'test'}"]

如何确保我的解析数据最终成为字典类型?

【问题讨论】:

    标签: python regex json


    【解决方案1】:

    如果您使用的是 Python 2.6,则可以只使用 JSON 模块来解析 JSON 内容。

    import json
    json.loads(dictString)
    

    如果您使用的是早期版本的 Python,您可以下载 simplejson 模块并使用它。

    例子:

    >>> json.loads('{"hello" : 4}')
    {u'hello': 4}
    

    【讨论】:

      【解决方案2】:

      您需要使用 JSON 解析器将字符串表示形式转换为实际的 Python 数据结构。查看标准库中json 模块的文档以获取一些示例。

      换句话说,您必须在代码末尾添加以下行

      photos = json.loads(parsed_photos[0])
      

      附言。理论上,您也可以使用eval 来实现相同的效果,因为 JSON(几乎)与 Python 文字兼容,但这样做会打开一个巨大的安全漏洞。只是为了让您知道。

      【讨论】:

      • 不太正确 - 您不能使用 eval,因为 JSON 与 Python 文字不兼容。示例:Python 使用None; JSON 使用null。 Python使用True/False; JSON 使用true/false
      • @Smashery:这不是语法上的区别,您只需为 null/true/false 定义本地变量,一切都会好起来的。不是我推荐的,只是使用库。
      • 我已经使用了您的第一个建议来获取字典 - 非常感谢!你能解释一下 parsed_photos[0] 中的 [0] 代表什么吗?
      • @bfox: findAll 返回给定正则表达式的所有匹配项的数组,[0] 只取第一个元素。
      猜你喜欢
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 2013-08-13
      • 1970-01-01
      相关资源
      最近更新 更多