Mon projet reçoit actuellement un message JSON sous python dont je dois 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 de json.dumps
, mais pour faire le contraire, je pense que j'ai besoin d'utiliser json.loads
. Cependant, je n'ai pas eu beaucoup de chance avec ça. Quelqu'un pourrait-il me fournir un extrait de code renvoyant "2"
avec l'entrée de "two"
dans l'exemple ci-dessus?
Très simple:
import json
j = json.loads('{"one" : "1", "two" : "2", "three" : "3"}')
print j['two']
Parfois, votre json n'est pas une chaîne. Par exemple, si vous obtenez un json à partir d'une URL comme ceci:
j = urllib2.urlopen('http://site.com/data.json')
vous devrez utiliser json.load, pas json.loads:
j_obj = json.load(j)
(il est facile d'oublier: le 's' est pour 'chaîne')
Pour une URL ou un fichier, utilisez json.load()
. Pour les chaînes avec un contenu .json, utilisez json.loads()
.
#! /usr/bin/python
import json
# from pprint import pprint
json_file = 'my_cube.json'
cube = '1'
with open(json_file) as json_data:
data = json.load(json_data)
# pprint(data)
print "Dimension: ", data['cubes'][cube]['dim']
print "Measures: ", data['cubes'][cube]['meas']
Voici un exemple simple qui peut vous aider:
json_string = """
{
"pk": 1,
"fa": "cc.ee",
"fb": {
"fc": "",
"fd_id": "12345"
}
}"""
import json
data = json.loads(json_string)
if data["fa"] == "cc.ee":
data["fb"]["new_key"] = "cc.ee was present!"
print json.dumps(data)
La sortie pour le code ci-dessus sera:
{"pk": 1, "fb": {"new_key": "cc.ee was present!", "fd_id": "12345",
"fc": ""}, "fa": "cc.ee"}
Notez que vous pouvez définir l’argument ident de dump pour l’imprimer comme suit (par exemple, lors de l’utilisation de print json.dumps (data, indent = 4)):
{
"pk": 1,
"fb": {
"new_key": "cc.ee was present!",
"fd_id": "12345",
"fc": ""
},
"fa": "cc.ee"
}