web-dev-qa-db-fra.com

convertir une chaîne json en objet python

Est-il possible de convertir une chaîne JSON (par exemple celle renvoyée par le service JSON de recherche sur Twitter) en objets chaîne simples. Voici une petite représentation des données renvoyées par le service JSON:

{
results:[...],
"max_id":1346534,
"since_id":0,
"refresh_url":"?since_id=26202877001&q=Twitter",
.
.
.
}

Disons que je stocke en quelque sorte le résultat dans une variable, par exemple, obj . Je cherche à obtenir des valeurs appropriées comme suit:

print obj.max_id
print obj.since_id

J'ai essayé d'utiliser simplejson.load() et json.load(), mais le message d'erreur 'str' object has no attribute 'read' m'a généré une erreur.

38
deostroll

J'ai essayé d'utiliser simplejson.load() et json.load(), mais le message d'erreur 'str' object has no attribute 'read' m'a généré une erreur.

Pour charger depuis une chaîne, utilisez json.loads() (notez le 's').

Plus efficacement, ignorez l'étape de lecture de la réponse dans une chaîne et transmettez simplement la réponse à json.load().

72
Ben James

si vous ne savez pas si les données seront un fichier ou une chaîne .... utilisez

import StringIO as io
youMagicData={
results:[...],
"max_id":1346534,
"since_id":0,
"refresh_url":"?since_id=26202877001&q=Twitter",
.
.
.
}

magicJsonData=json.loads(io.StringIO(str(youMagicData)))#this is where you need to fix
print magicJsonData
#viewing fron the center out...
#youMagicData{}>str()>fileObject>json.loads
#json.loads(io.StringIO(str(youMagicData))) works really fast in my program and it would work here so stop wasting both our reputation here and stop down voting because you have to read this twice 

de https://docs.python.org/3/library/io.html#text-i-o } _

json.loads des bibliothèques intégrées à Python, json.loads nécessite un objet fichier et ne vérifie pas ce qu'il a été transmis. Il appelle donc toujours la fonction de lecture sur ce que vous avez transmis, car l'objet fichier n'abandonne que lorsque vous appelez read (). . Donc, comme la classe de chaînes intégrée ne possède pas la fonction de lecture, nous avons besoin d'un wrapper. Ainsi, la fonction StringIO.StringIO, en bref, sous-classe la classe string et la classe file et maillonne le fonctionnement interne entend ma reconstruction de détail peu détaillée https://Gist.github.com/fenderrex/843d25ff5b0970d7e90e6c1d7e4a06b1 à la fin de tout ce que c'est comme écrire un fichier RAM et jsoning en une seule ligne ....

0
Rex Fender Baird
magicJsonData=json.loads(io.StringIO((youMagicData).decode("utf-8"))
print(magicJsonData)

La chaîne json de toute requête ou serveur http est de type tableau d'octets. 

res = json.loads((response.content).decode("utf-8") )
print(res)

ici, response.content peut être un tableau d'octets ou toute chaîne renvoyée par une requête du serveur, décodée au format chaîne (utf-8) et renvoyée sous forme de tableau python.

Ou utilisez simplement un bytearray mais utilisez plutôt json.load, json.loads

0
Cosmo Arun