Trabalhando com atributos JSON complexos no QGIS

7

Sou desenvolvedor e tenho uma ferramenta que gera um ativo geojson para nossa equipe de dados trabalhar usando o aplicativo QGIS. Devido à fonte original dos dados, esses recursos têm alguns atributos representados como dados hierárquicos complexos, impossíveis de projetar em um esquema plano.

Precisamos ser capazes de visualizar / editar o campo de atributo com a mesma eficácia que um blob JSON, em vez de uma string literal.

Quais instalações estão disponíveis para fazer isso no QGIS? Há algum plug-in de edição de campo que suporte esse trabalho? Idealmente, algum tipo de editor JSON pop-up com validação de formato de documento e nós recolhíveis, semelhante à forma como os editores do Visual Studio (Code) funcionam.

Como alternativa, algum outro fluxo de trabalho que nos permita gerenciar esses dados em uma ferramenta externa e injetá-los novamente no recurso de origem.

UPDATE: O Postgres foi ativado e criou uma coluna JSON a partir de uma coluna de texto existente contendo JSON. O QGIS o oculta na tabela de atributos. Alguma recomendação adicional sobre como trabalhar com atributos JSON diretamente no banco de dados?

Tristan Rhodes
fonte
1
Soa como empregos para postgres com JSON apoiar postgresql.org/docs/9.4/static/datatype-json.html
Mapperz
Examinou o Postgres, sem saber como ele se integraria ao editor QGIS, mas seria uma situação ideal para se trabalhar, tudo centralizado.
Tristan Rhodes
Também estou interessado nisso, mas não vi nada que facilite isso no QGIS. SQLite também tem suporte para JSON, a propósito: sqlite.org/json1.html
arjan
Não é o armazenamento que é o problema, é o editor. Efetivamente, temos uma equipe de engenheiros de dados limpando arquivos geojson e passando-os para nós. Eu ficaria feliz em ter isso apoiado por um banco de dados, mas ainda precisaríamos de um rico suporte de editor para que isso fosse útil. Pode apenas aprender Python e escrever um plugin :)
Tristan Rhodes
@TristanRhodes Se você escrever um plugin (ou encontrar outra solução), informe-nos!
Arjan #

Respostas:

2

Nas versões recentes do QGIS (> 3.3), se você tiver um campo JSON em um banco de dados PostgreSQL, poderá usar a map_getfunção em qualquer lugar com o Expression Dialog para extrair um valor específico.

Por exemplo, se você tem um campo JSON chamado "extraData"e o conteúdo é:

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

então map_get(extraData,'param1')produziriaSome string

Suponho que (embora ainda não tenha tentado) você pode usar recursivamente a função para recuperar valores profundamente aninhados.

Existem outras funções, como a from_jsonfunção que retorna todo o conteúdo. Dê uma olhada na seção Mapas dentro da caixa de diálogo Expressão.

TheVRChris
fonte
1

Suponha que tenhamos um campo / coluna chamado ' location ' com o seguinte conteúdo / valor (é uma string, mas possui json struct) no QGIS:

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

e você deseja acessar a propriedade 'sub-região', então a expressão:

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

retornará 'Jaén'

Testado com banco de dados de geopackage.

Juanma Font
fonte