web-dev-qa-db-fra.com

Convertir une chaîne brute en objet JSON en python2.7

J'interroge un serveur PostgreSQL pour obtenir des données et un objet json particulier est en fait renvoyé sous forme de chaîne. J'ai essayé de suivre mais cela ne donne pas la sortie correcte: (c'est une sortie ipython)

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\\"}]}"'

Comment puis-je convertir une chaîne en json en reconnaissant le symbole ":"?

Quand j'essaye "json.loads". Voici les erreurs: 

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)
5
Aditya Patel

Essayez json.loads() pour charger (désérialiser) une chaîne JSON dans une variable Python dict:

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

Votre code est buggy. Vous devriez utiliser json.loads() et non pas json.dumps() (si je comprends bien votre question). Ici, vous convertissez une chaîne brute en une chaîne JSON. Je pense que vous voulez convertir une chaîne JSON en un objet JSON non?

1
Antoine