ValueError:格式错误的字符串

时间:2016-05-11 12:14:20

标签: python json python-2.7 api unicode

我正在使用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字符串而不是字典。

1 个答案:

答案 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))