我正在使用API,它返回以下unicode作为响应:
dd = u"""{"meta":{"request":{"granularity":"Weekly","main_domain_only":false,
"domain":"borivali.me",
"country":"world"},"status":"Success",
"last_updated":"2016-05-09"},"bounce_rate":[{"date":"2016-04-12","bounce_rate":0.5},
{"date":"2016-04-19","bounce_rate":0.13355382826388454},
{"date":"2016-04-26","bounce_rate":0.0},
{"date":"2016-05-03","bounce_rate":0.23602940883106352}]}"""
我试图通过以下方式解析这些信息:
ddd = ast.literal_eval(dd)
print ddd
但是,我收到以下错误:
ValueError: malformed string
我的代码似乎有什么问题?
PS:dd
存储一个unicode字符串而不是字典。
答案 0 :(得分:2)
假设以下定义是正确的:
s = u"""{"meta":{"request":{"granularity":"Weekly","main_domain_only":false,
"domain":"borivali.me",
"country":"world"},"status":"Success",
"last_updated":"2016-05-09"},"bounce_rate":[{"date":"2016-04-12","bounce_rate":0.5},
{"date":"2016-04-19","bounce_rate":0.13355382826388454},
{"date":"2016-04-26","bounce_rate":0.0},
{"date":"2016-05-03","bounce_rate":0.23602940883106352}]}"""
鉴于该声明,s
是JSON文档,可以使用json
库解析为Python对象。
import json
p = json.loads(s)
ast
模块用于反序列化repr
Python对象,repr
在一般情况下不等于JSON序列化。以下关系成立(至少对于简单的Python类型,在JSON标准中明确定义 - 列表,字符串和字符串)。
d == ast.literal_eval(repr(d))
d == json.loads(json.dumps(d))