python get - Werte aus einer JSON-Datei analysieren?




value to (7)

Ich denke, was Ignacio sagt, ist, dass Ihre JSON-Datei falsch ist. Sie haben [] wenn Sie {} haben sollten. [] sind für Listen, {} sind für Wörterbücher.

So sollte Ihre JSON-Datei aussehen, Ihre JSON-Datei würde nicht einmal für mich geladen:

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

Dann können Sie Ihren Code verwenden:

import json
from pprint import pprint

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

pprint(data)

Mit Daten können Sie nun auch Werte wie folgt finden:

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

Probieren Sie diese aus und sehen Sie, ob es Sinn ergibt.

Ich habe dieses JSON in einer Datei:

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

Ich habe dieses Skript geschrieben, das den gesamten json-Text ausgibt:

json_data=open(file_directory).read()

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

Wie kann ich die Datei analysieren und einzelne Werte extrahieren?


Ihre data.json sollte folgendermaßen aussehen:

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

Ihr Code sollte sein:

import json
from pprint import pprint

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

Beachten Sie, dass dies nur in Python 2.6 und with-statement funktioniert, da es von der with-statement . In Python 2.5 verwenden Sie from __future__ import with_statement , in Python <= 2.4, siehe Justin Peels Antwort , auf der diese Antwort basiert.

Sie können nun auch auf einzelne Werte wie folgt zugreifen:

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

@Justin Peels Antwort ist sehr hilfreich, aber wenn Sie Python 3 verwenden, sollte JESON folgendermaßen gelesen werden:

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

Hinweis: Verwenden Sie json.loads anstelle von json.load . In Python 3 verwendet json.loads einen Zeichenfolgenparameter. json.load einen dateiähnlichen Objektparameter. data_file.read() gibt ein String-Objekt zurück.


   # 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

Wenn Sie in Python 3 sind, ist hier, wie Sie es tun können

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

Der Code sollte so aussehen, als ob die connection.json-Datei wie oben aussieht

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

"Ultra JSON" oder einfach "ujson" kann mit [] in Ihrer JSON-Datei umgehen. Wenn Sie eine JSON-Eingabedatei als Liste von JSON-Elementen in Ihr Programm einlesen; wie [{[{}]}, {}, [], etc...] kann ujson jede beliebige Reihenfolge von Listen von Wörterbüchern, Listenwörterbüchern behandeln.

Sie finden ujson im Python-Paket-Index und die API ist fast identisch mit Pythons integrierter json Bibliothek.

Ujson ist auch viel schneller, wenn Sie größere JSON-Dateien laden. Sie können die Leistungsdetails im Vergleich zu anderen Python JSON-Bibliotheken in demselben Link sehen.


Wie überprüfe ich, ob eine Datei vorhanden ist, ohne die try-Anweisung zu verwenden?

Im Jahr 2016 ist dies immer noch der einfachste Weg, um zu überprüfen, ob sowohl eine Datei vorhanden ist als auch, ob es sich um eine Datei handelt:

import os
os.path.isfile('./file.txt')    # Returns True if exists, else False

isfileist eigentlich nur eine Hilfsmethode, die intern verwendet wird os.statund stat.S_ISREG(mode)darunter liegt. Dies os.statist eine untergeordnete Methode, mit der Sie detaillierte Informationen zu Dateien, Verzeichnissen, Sockets, Puffern usw. erhalten. Mehr über os.stat hier

Hinweis: Bei diesem Ansatz wird die Datei jedoch in keiner Weise gesperrt . Daher kann Ihr Code anfällig für " Time of Check to Time of Use " ( TOCTTOU ) -Fehler sein .

Das Erhöhen von Ausnahmen ist daher ein akzeptabler und Pythonic-Ansatz für die Flusskontrolle in Ihrem Programm. Und man sollte in Betracht ziehen, fehlende Dateien mit IOErrors zu behandeln, und nicht mit ifAnweisungen ( nur ein Hinweis ).





python json parsing