使用json模块解码json字符串的问题

时间:2011-09-13 17:03:58

标签: python json reddit

联系服务器后,我得到以下字符串作为响应

{"kind": "t2", "data": {"has_mail": null, "name": "shadyabhi", "created": 1273919273.0, "created_utc": 1273919273.0, "link_karma": 1343, "comment_karma": 301, "is_gold": false, "is_mod": false, "id": "425zf", "has_mod_mail": null}}

在我的脚本中以类型'str'存储。

现在,当我尝试使用json.dumps(mystring,sort_keys = True,indent = 4)解码它时,我明白了。

"{\"kind\": \"t2\", \"data\": {\"has_mail\": null, \"name\": \"shadyabhi\", \"created\": 1273919273.0, \"created_utc\": 1273919273.0, \"link_karma\": 1343, \"comment_karma\": 301, \"is_gold\": false, \"is_mod\": false, \"id\": \"425zf\", \"has_mod_mail\": null}}"

应该真的像这样

shadyabhi@archlinux ~ $ echo '{"kind": "t2", "data": {"has_mail": "null", "name": "shadyabhi", "created": 1273919273.0, "created_utc": 1273919273.0, "link_karma": 1343, "comment_karma": 299, "is_gold": "false", "is_mod": "false", "id": "425zf", "has_mod_mail": "null"}}' | python2 -mjson.tool
{
    "data": {
        "comment_karma": 299, 
        "created": 1273919273.0, 
        "created_utc": 1273919273.0, 
        "has_mail": "null", 
        "has_mod_mail": "null", 
        "id": "425zf", 
        "is_gold": "false", 
        "is_mod": "false", 
        "link_karma": 1343, 
        "name": "shadyabhi"
    }, 
    "kind": "t2"
}
shadyabhi@archlinux ~ $

那么,这是怎么回事?

4 个答案:

答案 0 :(得分:2)

您需要在转储之前加载它。试试这个:

data = json.loads(returnFromWebService)

json.dumps(data, sort_keys=True, indent=4)

要添加更多细节 - 您将收到一个字符串,然后要求json库将其转储到字符串中。这没有多大意义。首先需要做的是将数据放入更有意义的容器中。通过调用loads,您可以获取返回的字符串值并将其解析为实际的Python字典。然后,您可以将该数据传递给dumps,{{1}}使用您请求的格式输出字符串。

答案 1 :(得分:1)

你有事情倒退。如果要将字符串转换为数据结构,则需要使用json.loads(thestring)json.dumps()用于将数据结构转换为json编码的字符串。

答案 2 :(得分:1)

你应该dump一个对象(比如字典)然后变成一个字符串,而不是反过来......见here

改为使用json.loads()

答案 3 :(得分:1)

你想要json.loadsdumps方法用于另一种方式(将对象转储到json字符串)。