create - python json to dict




Werte aus einer JSON-Datei analysieren? (5)

"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.

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?


@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.


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'

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

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




parsing