Python диктует JSON через json.loads: - PullRequest
19 голосов
/ 31 декабря 2010

У меня есть проблемы с кодом, который использует HTTP POST для отправки данных и должен возвращать результат JSON, содержимое которого представляет собой словарь. Я использую оболочку XML-RPC для предоставления этого сервиса. Когда оболочка получает информацию dict из переменной ответа http, содержимое dict находится в строке в следующем виде:

{'created': datetime.datetime(2010, 12, 31, 19, 13, 8, 379909), 'worker': u'GoogleWorker', 'ready': False, 'request_id': '8f1381853a444a42a37ae5152a3af947', 'owner': u'admin', 'shortname': u'test19'}

Я пытаюсь преобразовать приведенную ниже строку в результат JSON, используя следующую инструкцию:

result = json.loads(response[1])

Однако, когда я пытаюсь использовать json.loads для преобразования данных в JSON, я получаю следующую ошибку: Fault: <Fault 1: "<type 'exceptions.ValueError'>:Expecting property name: line 1 column 1 (char 1)">

Я вручную попытался преобразовать приведенную выше строку в JSON, но получаю ту же ошибку. Является ли диктат каким-то образом неправильным? Это из-за Unicode? Я также попытался установить для UTF-8 локаль, но это не удалось.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

33 голосов
/ 31 декабря 2010

Вы пытаетесь использовать неправильный метод.json.loads для загрузки JSON в Python .Если вы хотите конвертировать Python в JSON, вам нужно json.dumps.

result = json.dumps(response[1])
5 голосов
/ 31 декабря 2010

Это слово в буквальном формате, а не в формате JSON.Вы можете сделать:

import ast
result = ast.literal_eval(response[1])

, чтобы прочитать ответ в этом формате.Вы уверены, что Django еще не JSON-декодировал ответ?

1 голос
/ 31 декабря 2010

Я использую JSON на Django, я использую это:

import simplejson as json
#to encode
final= {'first':first_data,'second':second_data}
json.dumps(final)
#to decode this is the example from python's api 
json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...