Travailler avec des attributs JSON complexes dans QGIS

7

Je suis développeur et j'ai un outil qui génère un atout geojson pour que notre équipe de données puisse travailler avec l'application QGIS. En raison de la source d'origine des données, ces fonctionnalités ont certains attributs qui sont représentés comme des données hiérarchiques complexes, impossibles à projeter dans un schéma plat.

Nous devons être en mesure d'afficher / modifier le champ d'attribut aussi efficacement qu'un blob JSON, au lieu d'un littéral de chaîne.

Quelles sont les installations disponibles pour le faire dans QGIS? Existe-t-il des plugins d'édition de champ qui pourraient prendre en charge un tel travail? Idéalement, une sorte d'éditeur JSON contextuel avec validation du format de document et nœuds réductibles, semblable au fonctionnement des éditeurs Visual Studio (Code).

Alternativement, un autre flux de travail qui nous permettrait de gérer ces données dans un outil externe et de les réinjecter dans la fonction source.

MISE À JOUR: Postgres a été créé et a créé une colonne JSON à partir d'une colonne de texte existante contenant JSON. QGIS le cache dans la table attributaire. Avez-vous d'autres recommandations sur l'utilisation des attributs JSON directement dans la base de données?

Tristan Rhodes
la source
1
Cela ressemble à des travaux pour postgres avec prise en charge JSON postgresql.org/docs/9.4/static/datatype-json.html
Mapperz
J'ai regardé Postgres, je ne savais pas comment il s'intégrerait à l'éditeur QGIS, mais ce serait une situation idéale pour travailler avec tout centralisé.
Tristan Rhodes
Cela m'intéresse également, mais je n'ai rien vu qui facilite cela dans QGIS. Soit dit en
passant,
Ce n'est pas le stockage qui pose problème, c'est l'éditeur. Nous avons effectivement une équipe d'ingénieurs de données qui nettoie les fichiers geojson et nous les transmet. Je serais heureux d'avoir ceci soutenu par une base de données, mais nous aurions toujours besoin d'un support d'édition riche pour que cela soit utilisable. Pourrait juste apprendre Python et écrire un plugin :)
Tristan Rhodes
@TristanRhodes Si vous écrivez un plugin (ou trouvez une autre solution), faites-le nous savoir!
arjan

Réponses:

2

Dans les versions récentes de QGIS (> 3.3), si vous avez un champ JSON dans une base de données PostgreSQL, vous pouvez utiliser la map_getfonction n'importe où avec la boîte de dialogue d'expression pour extraire une valeur spécifique.

Par exemple, si vous avez un champ JSON appelé "extraData"et que le contenu est:

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

puis map_get(extraData,'param1')produiraitSome string

Je suppose (même si je ne l'ai pas essayé) que vous pouvez utiliser récursivement la fonction pour récupérer des valeurs profondément imbriquées.

Il existe d'autres fonctions telles que la from_jsonfonction qui renvoie l'intégralité du contenu. Jetez un œil à la section Cartes dans la boîte de dialogue Expression.

TheVRChris
la source
1

Supposons que nous ayons un champ / colonne appelé « emplacement » avec le contenu / la valeur suivante (c'est une chaîne mais a une structure json) dans QGIS:

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

et vous voulez accéder à la propriété "sous-région", donc l'expression:

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

retournera 'Jaén'

Testé avec une base de données de géopackage.

Juanma Font
la source