2015-07-21 1 views
4

Я запрашиваю сервер PostgreSQL для получения данных, а конкретный объект json фактически возвращается в виде строки. Я попытался следующие, но его не давая правильный вывод: (Это ipython выходы)Преобразование исходной строки в объект JSON в python2.7

test 
Out[103]: '{"max"=>28, "min"=>18, "custom"=>[{"id"=>"12345","name"=>"test_pur"}]}' 
In[104]: test.replace("=>",":") 
Out[104]: '{"max":28, "min":18, "custom":[{"id":"12345", "name":"test_pur"}]}' 
In[105]: j_obj = json.dumps(test) 
In[106]: j_obj 
Out[106]: '"{\\"max\\"=>28, \\"min\\"=>18, \\"custom\\"=>[{\\"id\\"=>\\"12345\\", \\"name\\"=>\\"test_pur\\"}]}"' 

Как я могу преобразовать строку в JSON, признав: символ «»?

Когда я пытаюсь «json.loads». Ниже приводятся следующие ошибки:

Traceback (most recent call last): 
    File "/Library/Python/2.7/site-packages/IPython/core/interactiveshell.py", line 3035, in run_code 
    exec(code_obj, self.user_global_ns, self.user_ns) 
    File "<ipython-input-12-a7562191decf>", line 1, in <module> 
    data = json.loads(temp) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 381, in raw_decode 
    obj, end = self.scan_once(s, idx) 
ValueError: Expecting : delimiter: line 1 column 11 (char 10) 
+0

возможный дубликат [Преобразование строки в формате JSON с помощью Python] (http://stackoverflow.com/questions/4528099/convert -string-to-json-using-python) – overactor

+0

Выполнено ли какое-либо из предложений с 'json.loads()' для вас? – adrianus

+0

Спасибо за ответ. Я только что отредактировал свой пост –

ответ

10

Попробуйте json.loads() для загрузки (десериализации) строку JSON в Python dict:

>>> import json 
>>> s = '{"max":28, "min":18, "custom":[{"id":"12345", "name":"test_pur"}]}' 
>>> data = json.loads(s) 
>>> print data["max"] 
28 
+1

+1, также у python обычно есть очень хорошая документация. Возможно, стоит прочитать [здесь] (https://docs.python.org/2/library/json.html) – akalikin

+0

. Обратите внимание, что 's' должно быть одинарным, а не двойным кавычком –

0

Ваш код неисправен. Вы должны использовать json.loads(), а не json.dumps() (если я правильно понял ваш вопрос). Здесь вы конвертируете необработанную строку в строку JSON. Я хочу, чтобы вы преобразовали строку JSON в объект JSON no?