Wie man GeoJSON in JSON umwandelt (Geometrie entfernen, Eigenschaften behalten)
Was GeoJSON wirklich enthält (und warum es mehr ist, als du brauchst)
GeoJSON ist einfach nur JSON, aber mit einer sehr spezifischen und oft sperrigen Struktur. Jede Datei verpackt deine Daten typischerweise in einer `FeatureCollection`, die ein Array von `Feature`-Objekten enthält. Jedes `Feature` wiederum hat zwei Hauptteile: `geometry` und `properties`. Im `geometry`-Block leben alle räumlichen Daten – Koordinaten-Arrays, Formentypen wie Point oder Polygon und komplexe Koordinatenringe, die Tausende von Zeilen umfassen können. Der `properties`-Block ist das, was dich normalerweise interessiert: die eigentlichen Attributdaten wie Namen, IDs, Bevölkerungszahlen oder Zeitstempel, die mit jeder Form verknüpft sind. Diese Struktur wird zum Problem, wenn du die Daten an ein System weitergeben musst, das keine „Karte“ versteht. Stell dir vor, du hast einen Datensatz aller 4.200 Bezirksgrenzen der USA aus einem GIS-Tool exportiert. Die resultierende GeoJSON-Datei könnte leicht 18 MB groß sein, wobei jedes Bezirkspolygon durch Tausende von Koordinatenpaaren definiert ist. Wenn dein Ziel nur darin besteht, den Bezirksnamen, den FIPS-Code und die Bevölkerung in einem Bericht oder einer API zu verwenden, schleppst du 95 % toten Ballast mit dir herum. Diese Geometrie ist nur unnötiges Rauschen. Schlimmer noch, einige Parser werden eine Datei rundheraus ablehnen, weil sie die geospatiale Schlüssel nicht erkennen. Für diese nicht-räumlichen Anwendungsfälle ist das Entfernen der Geometrie kein Datenverlust, sondern einfach eine intelligente Datenaufbereitung.
Der strukturelle Unterschied: GeoJSON vs. reines JSON
Schauen wir uns die Umwandlung mal genauer an. Hier ist ein minimales GeoJSON-`Feature`, mit dem du vielleicht startest: { "type": "Feature", "geometry": { "type": "Point", "coordinates": [-87.6298, 41.8781] }, "properties": { "city": "Chicago", "population": 2696555, "timezone": "America/Chicago" } } Nachdem die Geometrie entfernt wurde, ist dein Ziel das saubere, einfache JSON-Objekt, das im `properties`-Schlüssel verschachtelt ist: { "city": "Chicago", "population": 2696555, "timezone": "America/Chicago" } Wenn deine Eingabe eine `FeatureCollection` ist (eine Datei mit mehreren Features), ist das Ziel, ein einziges JSON-Array zu erzeugen, das nur die Eigenschaftsobjekte von jedem Feature enthält: [ { "city": "Chicago", "population": 2696555, "timezone": "America/Chicago" }, { "city": "Houston", "population": 2304580, "timezone": "America/Chicago" } ] Das ist das Format, das die meisten APIs, Tabellenkalkulations-Importer und Datenbank-Lader verstehen. Jeder, der schon einmal einen fehlgeschlagenen API-Aufruf debuggt hat, kennt die Frustration, wenn ein Parser an unerwarteten Schlüsseln der obersten Ebene wie `geometry` oder `type` scheitert. Das Endergebnis ist ein sauberes JSON-Array, das mit fast jedem Tool funktioniert. Ein entscheidendes Detail: Was ist, wenn ein Feature einen `null`-Wert für seine `properties` hat? Das ist valides GeoJSON. Ein guter Konverter erzeugt für dieses Feature ein leeres Objekt `{}`, anstatt abzustürzen oder es, schlimmer noch, stillschweigend zu überspringen. Schlampige Konverter scheitern ständig an diesem Test.
GeoJSON mit CocoConvert in JSON umwandeln
Für eine schnelle No-Code-Lösung ist der GeoJSON-zu-JSON-Konverter von CocoConvert unter /convert/geojson-to-json genau für diese Aufgabe konzipiert. Der Prozess ist einfach. Du lädst deine `.geojson`- oder `.json`-Datei hoch (er akzeptiert beide Erweiterungen, da GeoJSON oft `.json` verwendet), wählst deine Optionen aus und lädst das abgespeckte Ergebnis herunter. Der Konverter ist standardmäßig gnadenlos. Er findet das `features`-Array, schnappt sich das `properties`-Objekt von jedem einzelnen Feature und fügt sie zu einem sauberen JSON-Array zusammen. Der `geometry`-Schlüssel, der `type`-Schlüssel und der `FeatureCollection`-Wrapper werden alle zurückgelassen. Wenn deine Datei nur ein einziges `Feature` anstelle einer Sammlung enthält, ist die Ausgabe ein einzelnes JSON-Objekt, kein Array. CocoConvert verarbeitet im kostenlosen Tarif Dateien bis zu 50 MB, was für die meisten Datensätze mit weniger als 10.000 Features ausreicht. Aber wenn du eine riesige Datei wie ein landesweites Straßennetz hast (das leicht 200 MB oder mehr umfassen kann), musst du ein Kommandozeilen-Tool verwenden, das wir als Nächstes behandeln. Aus Datenschutzgründen verarbeitet der Konverter Dateien auf dem Server, speichert deine Daten aber nach deiner Sitzung nicht, ein wichtiges Detail, wenn deine Attribute sensible Informationen wie persönliche Identifikatoren enthalten. Standardmäßig hat die heruntergeladene Datei die Erweiterung `.json`. Das Einstellungsfeld gibt dir mehr Kontrolle und lässt dich einen benutzerdefinierten Dateinamen angeben oder eine eingerückte, menschenlesbare Ausgabe anstelle eines minifizierten Einzeilers erhalten.
Kommandozeilen-Alternativen für große Dateien oder die Automatisierung
Wenn du mit Dateien über 50 MB arbeitest oder diese Konvertierung in einem Skript automatisieren musst, ist die Kommandozeile dein Freund. Du hast zwei Hauptwaffen zur Auswahl: `jq` und das eingebaute `json`-Modul von Python. Für die reine JSON-Transformation ist nichts schneller und einfacher als `jq`: jq '[.features[].properties]' input.geojson > output.json Dieser Einzeiler macht genau das, was das Web-Tool tut: Er durchläuft jedes Feature, extrahiert das `properties`-Objekt und verpackt die Ergebnisse in ein JSON-Array. `jq` lässt sich leicht auf jedem gängigen Betriebssystem installieren (z. B. mit `brew install jq` unter macOS oder `apt install jq` unter Debian/Ubuntu) und kann Gigabyte-große Dateien ohne mit der Wimper zu zucken verarbeiten, da es die Daten streamt, anstatt sie komplett in den Speicher zu laden. Wenn die `id` deines Features wichtig ist (in GeoJSON befindet sie sich neben `properties`, nicht darin), kannst du sie einfügen: jq '[.features[] | {id: .id} + .properties]' input.geojson > output.json Wenn du mehr Logik benötigst, ist Python die Antwort: import json with open('input.geojson') as f: gj = json.load(f) result = [feature['properties'] for feature in gj['features']] with open('output.json', 'w') as f: json.dump(result, f, indent=2) Dieses kurze Skript gibt dir die volle Kontrolle, um Features zu filtern, Schlüssel umzubenennen oder seltsame Sonderfälle zu behandeln, bevor du die Ausgabe schreibst. Das Beste daran ist, dass das `json`-Modul Teil der Standardbibliothek von Python ist, also muss nichts extra installiert werden. Lass mich eine klare Empfehlung aussprechen: Nutze CocoConvert, wenn du eine einzelne Datei hast und in 30 Sekunden ein Ergebnis ohne Code haben willst. Nutze `jq` oder Python, wenn du eine Datenpipeline automatisierst oder Hunderte von Dateien verarbeitest.
Umgang mit Sonderfällen, die einfache Konverter aushebeln
GeoJSON aus der Praxis ist oft unordentlicher als die sauberen Beispiele in der Spezifikation. Hier sind die häufigsten Tücken, die einen naiven Konverter zum Scheitern bringen können. **Null-Geometrie:** Du wirst häufig auf Features mit `"geometry": null` stoßen. Diese sind vollkommen gültig und repräsentieren oft Datensätze, denen einfach Standortdaten fehlen. Ein robuster Konverter muss trotzdem ihre Eigenschaften extrahieren und nicht das gesamte Feature verwerfen. Die oben gezeigten `jq`- und Python-Methoden behandeln dies korrekt. **Verschachtelte Eigenschaften:** Das `properties`-Objekt selbst kann verschachtelte JSON-Objekte enthalten, wie `"properties": {"address": {"street": "Main St"}}`. Das Entfernen der Geometrie glättet diese verschachtelten Strukturen nicht; sie bleiben unverändert erhalten. Wenn du eine vollständig flache Struktur benötigst (zum Beispiel für eine CSV-Datei), ist das eine separate Transformation, die du durchführen musst. **Inkonsistente Schlüssel:** Es ist üblich, dass einige Features in einer Sammlung einen `"name"`-Schlüssel haben, während andere ihn nicht haben. Das resultierende JSON-Array wird einfach Objekte mit unterschiedlichen Strukturen enthalten. Das ist valides JSON, kann aber stark typisierte Systeme ins Stolpern bringen. CocoConvert extrahiert originalgetreu, was vorhanden ist; es wird nicht versuchen, das Schema für dich zu normalisieren. **`GeometryCollection`:** Einige Dateien verwenden den Typ `GeometryCollection`, der eine andere Struktur als die standardmäßige `FeatureCollection` hat. Viele Tools, einschließlich CocoConvert, erwarten eine `FeatureCollection` und können fehlschlagen, wenn sie auf eine `GeometryCollection` auf der obersten Ebene stoßen. **Kodierungsprobleme:** Das ist ein klassisches GIS-Datenproblem. Die GeoJSON-Spezifikation schreibt ausnahmslos die UTF-8-Kodierung vor. Aber Dateien, die aus älterer Software exportiert wurden, können manchmal Latin-1- oder Windows-1252-Zeichen enthalten. Dies führt zu Parsing-Fehlern. Du musst die Kodierung im Vorfeld mit einem Tool wie `iconv` korrigieren, bevor du die Konvertierung versuchst.
Wann du die Geometrie behalten solltest (und anders konvertieren musst)
Während das Entfernen der Geometrie für reine Daten-Workflows großartig ist, ist es manchmal der absolut falsche Schritt. Es gibt viele Situationen, in denen du die räumlichen Daten benötigst, nur in einer anderen Form. Wenn du Daten an eine Web-Mapping-Bibliothek wie Leaflet oder MapboxGL übergibst, hör auf. Konvertiere nichts. Beide Bibliotheken verarbeiten GeoJSON nativ, also würde die Konvertierung in reines JSON genau die Koordinaten entfernen, die sie zum Zeichnen deiner Karte benötigen. Manchmal brauchst du die Koordinaten, nur in einer anderen Form – wie ein flaches Array von `{lat, lng, name}`-Objekten für ein benutzerdefiniertes Diagramm. Das ist eine Umformungsaufgabe, kein Entfernen der Geometrie. `jq` ist dafür perfekt: jq '[.features[] | {lat: .geometry.coordinates[1], lng: .geometry.coordinates[0], name: .properties.name}]' input.geojson > output.json Achte hier genau auf die Reihenfolge der Koordinaten. GeoJSON ist streng `[Längengrad, Breitengrad]` oder (x, y). Das ist das Gegenteil von dem, was viele Leute und Systeme erwarten. Dies falsch zu machen, ist der häufigste Fehler beim manuellen Umgang mit GeoJSON-Koordinaten und hat den ebenso lustigen wie frustrierenden Effekt, dass deine Daten auf der falschen Hemisphäre landen. Wenn dein Ziel ist, GeoJSON in ein anderes geospatiales Format wie TopoJSON, Shapefile oder KML zu konvertieren, brauchst du ein anderes Werkzeug. CocoConvert führt diese geometrieerhaltenden Konvertierungen nicht durch. Dafür solltest du ein speziell entwickeltes Tool wie das Kommandozeilen-Kraftpaket `ogr2ogr` (von GDAL) oder das ausgezeichnete Web-Tool Mapshaper verwenden. Sie sind die richtigen Werkzeuge für diesen Job. Unser GeoJSON-zu-JSON-Tool unter /convert/geojson-to-json ist messerscharf auf eine einzige Aufgabe fokussiert: das Extrahieren von Eigenschaften. Es macht diese eine Sache, und das macht es gut.
Überprüfe dein Ergebnis, bevor du es weiterverwendest
Bevor du deine glänzend neue JSON-Datei in ein nachgelagertes System einspeist, nimm dir zwei Minuten Zeit, um sie zu validieren. Dieser einfache Schritt kann dir stundenlanges Debugging von verwirrenden Fehlern später ersparen. Öffne die Datei in einem Texteditor. Ist die oberste Ebene ein Array (beginnt es mit `[`)? Ist jedes Element ein Objekt (beginnt es mit `{`)? Ganz wichtig: Siehst du irgendwelche `geometry`- oder `type`-Schlüssel? Solltest du nicht. Eine schnelle Suche nach dem String 'coordinates' sollte null Treffer ergeben. Als Nächstes überprüfe die Anzahl der Datensätze. Wenn dein ursprüngliches GeoJSON 847 Features hatte, muss dein resultierendes JSON-Array genau 847 Objekte haben. Wenn die Zahlen nicht übereinstimmen, hat der Konverter Features verworfen, wahrscheinlich aufgrund von fehlerhafter Eingabe oder falscher Behandlung von Nullwerten. Nun überprüfe die Daten stichprobenartig. Vergleiche die Eigenschaftswerte des ersten, letzten und eines zufälligen mittleren Datensatzes in deinem neuen JSON mit der ursprünglichen GeoJSON-Datei. Wenn die Namen, IDs und Zahlen alle übereinstimmen, kannst du sicher sein, dass die Konvertierung sauber war. Für automatisierte Pipelines verwende JSONSchema. Tools wie `ajv` für Node.js oder `jsonschema` für Python ermöglichen es dir, programmatisch zu überprüfen, ob jedes Objekt in deinem Array die erwarteten Schlüssel und Datentypen hat. Dies ist für jeden Prozess unerlässlich, der regelmäßig mit sich ändernden Daten läuft. Und eine letzte Sache: Wenn die Daten in eine Datenbank sollen, führe nach dem Import eine `COUNT`-Abfrage auf der Tabelle aus. Stimmt die Zeilenanzahl mit deiner Erwartung überein? Diese 30-Sekunden-Überprüfung ist die ultimative Bestätigung, dass die gesamte Kette – Konvertierung und Import – perfekt funktioniert hat.