python - parser - recuperer valeur tableau json




Analyse des valeurs à partir d'un fichier JSON? (5)

J'ai ce JSON dans un fichier:

{
    "maps": [
        {
            "id": "blabla",
            "iscategorical": "0"
        },
        {
            "id": "blabla",
            "iscategorical": "0"
        }
    ],
    "masks": [
        "id": "valore"
    ],
    "om_points": "value",
    "parameters": [
        "id": "valore"
    ]
}

J'ai écrit ce script qui imprime tout le texte json:

json_data=open(file_directory).read()

data = json.loads(json_data)
pprint(data)

Comment puis-je analyser le fichier et extraire des valeurs uniques?


"Ultra JSON" ou simplement "ujson" peut gérer avoir [] dans votre fichier JSON. Si vous lisez un fichier d'entrée JSON dans votre programme sous la forme d'une liste d'éléments JSON; comme, [{[{}]}, {}, [], etc...] ujson peut gérer n'importe quel ordre arbitraire de listes de dictionnaires, de dictionnaires de listes.

Vous pouvez trouver ujson dans l' index du paquet Python et l'API est presque identique à la bibliothèque json intégrée de Python.

ujson est également beaucoup plus rapide si vous chargez des fichiers JSON plus volumineux. Vous pouvez voir les détails de performance en comparaison avec d'autres bibliothèques Python JSON dans le même lien fourni.


Je pense qu'Ignacio dit que votre fichier JSON est incorrect. Vous avez [] quand vous devriez avoir {} . [] sont pour les listes, {} sont pour les dictionnaires.

Voici comment devrait ressembler votre fichier JSON, votre fichier JSON ne serait même pas chargé pour moi:

{
    "maps": [
        {
            "id": "blabla",
            "iscategorical": "0"
        },
        {
            "id": "blabla",
            "iscategorical": "0"
        }
    ],
    "masks": {
        "id": "valore"
    },
    "om_points": "value",
    "parameters": {
        "id": "valore"
    }
}

Ensuite, vous pouvez utiliser votre code:

import json
from pprint import pprint

data = json.load(open('data.json'))

pprint(data)

Avec les données, vous pouvez maintenant trouver des valeurs comme:

data["maps"][0]["id"]
data["masks"]["id"]
data["om_points"]

Essayez-les et voyez si cela commence à avoir du sens.


Votre data.json devrait ressembler à ceci:

{
 "maps":[
         {"id":"blabla","iscategorical":"0"},
         {"id":"blabla","iscategorical":"0"}
        ],
"masks":
         {"id":"valore"},
"om_points":"value",
"parameters":
         {"id":"valore"}
}

Votre code devrait être:

import json
from pprint import pprint

with open('data.json') as data_file:    
    data = json.load(data_file)
pprint(data)

Notez que cela ne fonctionne que dans Python 2.6 et plus, car cela dépend de la- with-statement . Dans Python 2.5, utilisez from __future__ import with_statement , en Python <= 2.4, voir la réponse de Justin Peel , sur laquelle repose cette réponse.

Vous pouvez maintenant accéder à des valeurs uniques comme celle-ci:

data["maps"][0]["id"]  # will return 'blabla'
data["masks"]["id"]    # will return 'valore'
data["om_points"]      # will return 'value'

si vous êtes en python 3 voici comment vous pouvez le faire

{
  "connection1": {
    "DSN": "con1",
    "UID": "abc",
    "PWD": "1234",
    "connection_string_python":"test1"
  }
  ,
  "connection2": {
    "DSN": "con2",
    "UID": "def",
    "PWD": "1234"
  }
}

Le code devrait ressembler à supposer que le fichier connection.json ressemble à ci-dessus

connection_file = open('connection.json', 'r')
conn_string = json.load(connection_file)
conn_string['connection1']['connection_string_python'])
connection_file.close()
>>>test1

data = []
with codecs.open('d:\output.txt','rU','utf-8') as f:
    for line in f:
       data.append(json.loads(line))






parsing