Trabajando con atributos JSON complejos en QGIS

7

Soy desarrollador y tengo una herramienta que genera un activo geojson para que nuestro equipo de datos trabaje con la aplicación QGIS. Debido a la fuente original de los datos, estas características tienen algunos atributos que se representan como datos jerárquicos complejos, imposibles de proyectar en un esquema plano.

Necesitamos poder ver / editar el campo de atributo como efectivamente un blob JSON, en lugar de un literal de cadena.

¿Qué instalaciones están disponibles para hacer esto en QGIS? ¿Hay complementos de edición de campo que admitan dicho trabajo? Idealmente, algún tipo de editor JSON emergente con validación de formato de documento y nodos plegables, similar a cómo funcionan los editores de Visual Studio (Código).

Alternativamente, algún otro flujo de trabajo que nos permita administrar estos datos en una herramienta externa y volver a inyectarlos en la función de origen.

ACTUALIZACIÓN: Got Postgres hizo girar y creó una columna JSON a partir de una columna de texto existente que contiene JSON. QGIS lo oculta en la tabla de atributos. ¿Alguna otra recomendación sobre trabajar con atributos JSON directamente en la base de datos?

Tristan Rhodes
fuente
1
Suena como trabajos para postgres con soporte JSON postgresql.org/docs/9.4/static/datatype-json.html
Mapperz
Miré a Postgres, no estoy seguro de cómo se integraría con el editor QGIS, pero sería una situación ideal para trabajar, todo centralizado.
Tristan Rhodes
También estoy interesado en esto, pero no he visto nada que lo facilite en QGIS. SQLite también tiene soporte para JSON, por cierto: sqlite.org/json1.html
arjan el
El problema no es el almacenamiento, es el editor. Efectivamente, tenemos un equipo de ingenieros de datos que limpian los archivos geojson y nos los pasan. Estaría encantado de tener esto respaldado por una base de datos, pero aún necesitaríamos un rico soporte de editor para que esto sea utilizable. Podría aprender Python y escribir un complemento :)
Tristan Rhodes
@TristanRhodes Si escribe un complemento (o encuentra otra solución), ¡háganoslo saber!
arjan

Respuestas:

2

En versiones recientes de QGIS (> 3.3), si tiene un campo JSON en una base de datos PostgreSQL, puede usar la map_getfunción en cualquier lugar con el Diálogo de expresión para extraer un valor específico.

Por ejemplo, si tiene un campo JSON llamado "extraData"y el contenido es:

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

entonces map_get(extraData,'param1')produciríaSome string

Supongo (aunque no lo he probado) que puede usar la función de forma recursiva para recuperar valores profundamente anidados.

Hay otras funciones, como la from_jsonfunción que devuelve todo el contenido. Eche un vistazo a la sección Mapas dentro del cuadro de diálogo Expresión.

TheVRChris
fuente
1

Supongamos que tenemos un campo / columna llamada ' ubicación ' con el siguiente contenido / valor (es una cadena pero tiene estructura json) en QGIS:

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

y desea acceder a la propiedad 'subregión', entonces la expresión:

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

volverá 'Jaén'

Probado con la base de datos de geopaquete.

Juanma Font
fuente