Проблема декодирования строк json с помощью модуля json - PullRequest
0 голосов
/ 13 сентября 2011

После обращения к серверу я получаю следующие строки в качестве ответа

{"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 ]

2 голосов
/ 13 сентября 2011

Вам нужно загрузить его, прежде чем вы сможете сбросить его. Попробуйте это:

data = json.loads(returnFromWebService)

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

Чтобы добавить немного больше деталей - вы получаете строку, а затем просите библиотеку json вывести ее в строку. Это не имеет большого смысла. Сначала нужно поместить данные в более значимый контейнер. Вызывая loads, вы берете строковое значение возвращаемого значения и анализируете его в фактический словарь Python. Затем вы можете передать эти данные в dumps, который выводит строку с использованием запрошенного вами форматирования.

1 голос
/ 13 сентября 2011

Вы хотите json.loads. Метод dumps предназначен для перехода в другую сторону (выгрузка объекта в строку json).

1 голос
/ 13 сентября 2011

Вы должны dump объект (например, словарь), который затем становится строкой, а не наоборот ... см. здесь .

Вместо этого используйте json.loads().

1 голос
/ 13 сентября 2011

У тебя есть вещи задом наперед. Если вы хотите преобразовать строку в структуру данных, вам нужно использовать json.loads(thestring). json.dumps() - для преобразования структуры данных в строку в кодировке json.

...