【问题标题】:What can be used instead of ast module?什么可以代替 ast 模块?
【发布时间】:2010-12-21 15:29:42
【问题描述】:

在我的项目中,我评估一个 json 数据以提取信息。代码如下:

conn = httplib.HTTPConnection(host)
conn.request("GET", "/done_json.php")
r = conn.getresponse()
data = r.read()
tmp = ast.literal_eval(data)
list = []
for a in tmp.keys():
    list.append(tmp[a])

如何将其更改为与 Python 2.4 兼容?


我的 json 示例:

{'key_64': {'size3': 'CNDCRNCDF3FY09XL7UUBCBCPTYE4H7YBG1I5MILNBW172BMHVI.png', 'id': 'CNDCRNCDF3FY09XL7UUBCBCPTYE4H7YBG1I5MILNBW172BMHVI', 'size2': '', 'size1': 'http://dev.geco.com/site/2/CNDCRNCDF3FY09XL7UUBCBCPTYE4H7YBG1I5MILNBW172BMHVI.png'}, 'key_65': {'size3': 'CNDCRNEHLW2XFFCC90PDE77EEJHJF6RC3R8PEVUACB0C34H330.png', 'id': 'CNDCRNEHLW2XFFCC90PDE77EEJHJF6RC3R8PEVUACB0C34H330' (...)

【问题讨论】:

    标签: python json abstract-syntax-tree evaluate python-2.4


    【解决方案1】:

    不要使用ast.literal_eval,无论如何这对工作来说都是错误的。使用simplejson.load(r)(或标准 json 模块,而不是较新版本中的 simplejson)。

    ast.literal_eval 旨在评估 Python 文字。 JSON 大体相同,但不完全一样(true/false/null 而不是 True/False/None)。

    【讨论】:

    • 问题是返回的json是一个字符串。所以运行 json.load(data) 给出:AttributeError: 'str' object has no attribute 'read'.
    • 您将json.load(r) 与 r(响应)对象一起使用,该对象确实具有读取方法。或者,如果您确实需要单独获取字符串,也可以使用 json.loads(data)(注意 s)。
    • simplejson.loads(data) 相反:ValueError: Expecting property name: line 1 column 2 (char 2)
    • 所以我应该在这里使用一些正则表达式?
    • @DevAno1:“所以我应该在这里使用一些正则表达式?”不,您应该获得符合 JSON 规范的正确 JSON。否则,您可以尝试使用replace()' 替换为"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    相关资源
    最近更新 更多