Question Analyse des valeurs à partir d'un fichier JSON?


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?


1101
2018-05-14 15:54


origine


Réponses:


Je pense qu'Ignacio dit que votre fichier JSON est incorrect. Tu as [] quand tu devrais 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

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

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.


1653
2018-05-14 16:10



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-déclaration. En Python 2.5 utiliser from __future__ import with_statement, en Python <= 2.4, voir La réponse de Justin Peel, sur laquelle cette réponse est basée.

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'

268
2017-11-29 20:10



La réponse de @Justin Peel est vraiment utile, mais si vous utilisez Python 3, lire JSON devrait être fait comme ceci:

with open('data.json', encoding='utf-8') as data_file:
    data = json.loads(data_file.read())

Note: utiliser json.loads au lieu de json.load. En Python 3, json.loads prend un paramètre de chaîne. json.load prend un paramètre d'objet semblable à un fichier. data_file.read() retourne un objet chaîne.


60
2018-05-22 03:44



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

47
2018-05-12 20:47



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

Vous pouvez trouver ujson dans le Index du package Python et l'API est presque identique à celle de Python json bibliothèque.

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.


11
2018-03-09 21:38



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

6
2018-04-25 17:42



   # Here you go with modified json file:
   # data.json file : 
    {
        "maps": [
            {
                "id": "blabla",
                "iscategorical": "0"
            },
            {
                "id": "blabla",
                "iscategorical": "0"
            }
        ],
        "masks": [{
            "id": "valore"
        }],
        "om_points": "value",
        "parameters": [{
            "id": "valore"
        }]
    }


   # You can call or print data on console by using below lines

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

    print(data_item['parameters'][0]['id'])

    #Output : 
    #pprint(data_item) output as :

    {'maps': [{'id': 'blabla', 'iscategorical': '0'},
              {'id': 'blabla', 'iscategorical': '0'}],
     'masks': [{'id': 'valore'}],
     'om_points': 'value',
     'parameters': [{'id': 'valore'}]}
    #print(data_item['parameters'][0]['id']) output as :
    valore

4
2017-11-07 01:53