Mon projet reçoit actuellement un message JSON en python dont j'ai besoin pour obtenir des informations. Pour cela, définissons-le sur un simple JSON dans une chaîne:
jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}'
Jusqu'à présent, j'ai généré des requêtes JSON à l'aide d'une liste, puis json.dumps
, mais pour faire le contraire, je pense que je dois utiliser json.loads
. Mais je n'ai pas eu beaucoup de chance avec ça. Quelqu'un pourrait-il me fournir un extrait qui retournerait "2"
avec l'entrée de "two"
dans l'exemple ci-dessus?
'
des délimiteurs de chaîne entre guillemets simples, vous pouvez avoir créé par inadvertance des représentations de chaîne pour les dictionnaires Python. JSON utilisera toujours des"
délimiteurs . Si oui, réparez votre code qui produit cette sortie à utiliser à lajson.dumps()
place destr()
ourepr()
, et dirigez-vous vers Convertir une représentation de chaîne d'un dictionnaire en dictionnaire? pour savoir comment récupérer vos données Python. D'autres indices que vous avez un littéral Python? RecherchezNone
,True
ouFalse
, JSON utiliseraitnull
,true
&false
.'
des délimiteurs de chaîne entre guillemets simples), ont également un coup d'oeil ici: stackoverflow.com/questions/41168558/…Réponses:
Très simple:
la source
import simplejson as json
. Oublié de mentionner mais merci :).load
méthode au lieu de.loads
Parfois, votre json n'est pas une chaîne. Par exemple, si vous obtenez un json à partir d'une URL comme celle-ci:
vous devrez utiliser json.load, pas json.loads:
(il est facile d'oublier: le 's' est pour 'string')
la source
Pour URL ou fichier, utilisez
json.load()
. Pour une chaîne avec un contenu .json, utilisezjson.loads()
.la source
Voici un exemple simple qui peut vous aider:
La sortie du code ci-dessus sera:
Notez que vous pouvez définir l'argument ident de dump pour l'imprimer comme tel (par exemple, lorsque vous utilisez print json.dumps (data, indent = 4)):
la source
Peut utiliser des modules json ou ast python:
la source
ast.literal_eval()
fonction pour JSON, parce qu'au - delà de vos exemples triviaux uniquement du texte et entier que vous allez rencontrer des problèmes. JSON n'est pas Python . Ce n'est pas parce que certains JSON peuvent être analysés queast.literal_eval()
cela constitue une approche appropriée.r'{"foo": null, "bar": true, "baz": "\ud83e\udd26"}'
aideast.literal_eval()
, car il contient des valeurs nulles, une valeur booléenne et un seul point de code non BMP. JSON représente ces valeurs différemment de la façon dont les littéraux Python les représenteraient.json.loads()
d'autre part, n'a aucun problème avec cette entrée et correctement décode que pour{'foo': None, 'bar': True, 'baz': '🤦'}
.ast.literal_eval()
est un peu plus lent et ne peut pas être personnalisé. Vous ne devez jamais l'utiliser pour décoder le JSON .