Arbeiten mit komplexen JSON-Attributen in QGIS

7

Ich bin Entwickler und habe ein Tool, das ein Geojson-Asset generiert, mit dem unser Datenteam mithilfe der QGIS-App arbeiten kann. Aufgrund der ursprünglichen Datenquelle weisen diese Features einige Attribute auf, die als komplexe hierarchische Daten dargestellt werden und nicht in ein flaches Schema projiziert werden können.

Wir müssen in der Lage sein, das Attributfeld als effektives JSON-Blob anstelle eines Zeichenfolgenliterals anzuzeigen / zu bearbeiten.

Welche Einrichtungen stehen dazu in QGIS zur Verfügung? Gibt es Plugins zur Feldbearbeitung, die einen solchen Job unterstützen würden? Idealerweise eine Art Popup-JSON-Editor mit Überprüfung des Dokumentformats und reduzierbaren Knoten, ähnlich wie Visual Studio (Code) -Editoren.

Alternativ ein anderer Workflow, mit dem wir diese Daten in einem externen Tool verwalten und erneut in die Quellfunktion einfügen können.

UPDATE: Postgres wurde gestartet und eine JSON-Spalte aus einer vorhandenen Textspalte mit JSON erstellt. QGIS versteckt es in der Attributtabelle. Weitere Empfehlungen zum Arbeiten mit JSON-Attributen direkt in der Datenbank?

Tristan Rhodos
quelle
1
Klingt nach Jobs für Postgres mit JSON-Unterstützung postgresql.org/docs/9.4/static/datatype-json.html
Mapperz
Ich habe mir Postgres angesehen, bin mir nicht sicher, wie es sich in den QGIS-Editor integrieren lässt, wäre aber eine ideale Situation, um damit zu arbeiten, alles zentralisiert.
Tristan Rhodes
Das interessiert mich auch, aber ich habe in QGIS nichts gesehen, was dies erleichtert. SQLite hat übrigens auch Unterstützung für JSON: sqlite.org/json1.html
arjan
Es ist nicht der Speicher, der das Problem darstellt, sondern der Editor. Wir haben effektiv ein Team von Dateningenieuren, die Geojson-Dateien bereinigen und an uns weitergeben. Ich würde mich freuen, wenn dies von einer Datenbank unterstützt würde, aber wir würden immer noch umfangreiche Editorunterstützung benötigen, damit dies verwendet werden kann. Könnte einfach Python lernen und ein Plugin schreiben :)
Tristan Rhodes
@TristanRhodes Wenn Sie ein Plugin schreiben (oder eine andere Lösung finden), lassen Sie es uns bitte wissen!
Arjan

Antworten:

2

Wenn Sie in neueren QGIS-Versionen (> 3.3) ein JSON-Feld in einer PostgreSQL-Datenbank haben, können Sie die map_getFunktion überall im Ausdrucksdialog verwenden, um einen bestimmten Wert zu extrahieren.

Beispiel: Wenn Sie ein JSON-Feld aufgerufen haben "extraData"und der Inhalt wie folgt lautet:

{ 
        "param1": "Some string",
        "param2": "Another string"
}

dann map_get(extraData,'param1')würde produzierenSome string

Ich nehme an (obwohl ich es nicht ausprobiert habe), dass Sie die Funktion rekursiv verwenden können, um tief verschachtelte Werte abzurufen.

Es gibt andere Funktionen wie die from_jsonFunktion, die den gesamten Inhalt zurückgibt. Schauen Sie sich den Abschnitt "Karten" im Ausdrucksdialog an.

TheVRChris
quelle
1

Angenommen, wir haben ein Feld / eine Spalte mit dem Namen ' location ' mit dem folgenden Inhalt / Wert (es ist eine Zeichenfolge, hat aber eine json-Struktur) in QGIS:

{
    "address": "A-319, Hornos, Jaén, Andalusia, 23292, Spain",
    "continent": "Europe",
    "country": "Spain",
    "region": "Andalucía",
    "subregion": "Jaén"
}

und Sie möchten Zugriff auf die Eigenschaft 'subregion', also der Ausdruck:

map_get(json_to_map("location"),'subregion')

wird 'Jaén' zurückgeben

Getestet mit Geopackage-Datenbank.

Juanma Schriftart
quelle