web-dev-qa-db-fra.com

Comment analyser les données en JSON?

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?

242
ingh.am

Très simple:

import json
j = json.loads('{"one" : "1", "two" : "2", "three" : "3"}')
print j['two']
435
John Giotta

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')

78
jisaacstone

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']
42

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"
}
25
Venkat