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.
J'ai essayé d'utiliser
simplejson.load()
etjson.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()
.
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 ....
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