2016-10-19 2 views
1

Ich habe zwei JSON-Dateien.JSON-Datei neu formatieren?

Datei A:

"features": [ 
    { 
    "attributes": { 
    "NAME": "R T CO", 
    "LTYPE": 64, 
    "QUAD15M": "279933", 
    "OBJECTID": 225, 
    "SHAPE.LEN": 828.21510830520401 
    }, 
    "geometry": { 
    "paths": [ 
    [ 
     [ 
     -99.818614674337155, 
     27.782542677671653 
     ], 
     [ 
     -99.816056346719051, 
     27.782590806976135 
     ] 
    ] 
    ] 
    } 
    } 

Datei B:

"features": [ 
{ 
    "geometry": { 
    "type": "MultiLineString", 
    "coordinates": [ 
     [ 
     [ 
      -99.773315512624, 
      27.808875128096 
     ], 
     [ 
      -99.771397939251, 
      27.809512259374 
     ] 
     ] 
    ] 
    }, 
    "type": "Feature", 
    "properties": { 
    "LTYPE": 64, 
    "SHAPE.LEN": 662.3800009247, 
    "NAME": "1586", 
    "OBJECTID": 204, 
    "QUAD15M": "279933" 
    } 
}, 

I Datei B wie Datei A. aussehen umformatiert werden möchten Change "Eigenschaften" auf "Eigenschaften", „Koordinaten "to" Pfade ", und entfernen Sie beide" type ":" MultiLineString "und" type ":" Feature ". Was ist der beste Weg, dies über Python zu tun?

Gibt es eine Möglichkeit, auch die Schlüsselpaare der "Attribute" so umzuordnen, dass sie wie Datei A aussehen?

Es ist ein ziemlich großer Datensatz und ich möchte die gesamte Datei durchlaufen.

+2

Was haben Sie versucht? Es gibt viele JSON + Python-Antworten auf SO, haben sie dich irgendwo hingebracht? – roganjosh

+1

Mit dem 'json'-Modul können Sie JSON-Dateien in Python-Datenstrukturen laden und sie später wieder in JSON speichern. Es ist also eine Frage des Durchschleifens der python 'dict' und' list' Elemente, die Sie bekommen. Dies ist meist eine langwierige Buchführung und Sie können diesen Teil selbst erledigen! – tdelaney

+1

In Python JSON-Objekte sind nur Wörterbücher - also nur in einer Datei lesen, ändern Sie den Inhalt des Wörterbuchs, und schreiben Sie es aus und die andere Datei. – martineau

Antwort

4

Die Manipulation von JSON in Python ist ein guter Kandidat für die input-process-output model Programmierung. Für die Eingabe konvertieren Sie die externe JSON-Datei in eine Python-Datenstruktur mit json.load().

Für die Ausgabe konvertieren Sie die Python-Datenstruktur in eine externe JSON-Datei mit json.dump().

Für die Verarbeitung oder Konvertierung Schritt, was immer Sie tun müssen, mit gewöhnlichen Python dict und list Methoden.

Dieses Programm könnte das tun, was Sie wollen:

import json 

with open("b.json") as b: 
    b = json.load(b) 

for feature in b["features"]: 

    feature["attributes"] = feature["properties"] 
    del feature["properties"] 

    feature["geometry"]["paths"] = feature["geometry"]["coordinates"] 
    del feature["geometry"]["coordinates"] 

    del feature["geometry"]["type"] 

    del feature["type"] 

with open("new-b.json", "w") as new_b: 
    json.dump(b, new_b, indent=1, separators=(',', ': ')) 
+0

Danke, das ist was ich brauche. Ich habe die JSON-Bibliothek noch nicht verwendet. – a1234

-2

Was:

cat <file> | python -m json.tool 

Dadurch wird der Inhalt der Datei in ein einheitliches Menschen lesbaren Format umformatieren. Wenn Sie wirklich die Namen der Felder ändern müssen, können Sie sed verwenden.

Dies kann für Ihren Anwendungsfall ausreichend sein. Wenn Sie etwas haben, das nuancierteres Parsen erfordert, müssen Sie lesen, wie Sie das JSON über eine ORM-Bibliothek verwalten.

+1

Ich bin nicht schlecht im Umgang mit JSON in Python, aber diese Antwort ergibt keinen Sinn für mich. Was macht das und wie? – roganjosh

+1

Und wie ist das in Anbetracht von zwei JSON-Objekten? – roganjosh

+0

Was ist json.tool? Wie löst das das Problem? – tdelaney

Verwandte Themen