Estrarre dati da un file json
Come e estrarre dati da un file json usando ogr2ogr.
A cura di
Totò Fiandaca
| issue
#237
| guida/e
Andrea Borruso
Caso d’uso
Dato un FileGDB DBGT_10K_22_V01.gdb (pesa circa 5 GB con oltre 300 tabelle, relazioni e domini), che contiene semplici tabelle e tabelle con attributi geometrici e domini di campo. Estrarre i domini di campo e creare una lista dei domini associati ai vari layer.
Soluzione
<dbgt10k_fc_domain.json jq '.layers[]|{name:.name,fields:.fields[].domainName}' | mlr --j2c unsparsify then filter '!is_null($fields)' then sort -f name,fields then nest --ivar "," -f fields
output:
dove:
jq
, estrae prima il nodolayers
, e poi dall’output costruisco una nuova struttura composta dal nome del layer e dal nodofields
contenuto nei layer;Miller
trasforma il precedente output JSON in CSV, e filtro soltanto i record per i quali c'è un field associato, ordina pername
efields
(campi creati) e infine implode i nomi dei field, li unisce, separandoli tramite,
e raggruppandoli per nome di layer sorgente.
una riga per ogni dominio:
<dbgt10k_fc_domain.json jq '.layers[]|{name:.name,fields:.fields[].domainName}' | mlr --j2c unsparsify then filter '!is_null($fields)' then sort -f name,fields
script bash:
#!/bin/bash
set -x
set -e
set -u
set -o pipefail
folder="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# dbgt10k_fc_domain.json ottenuto: 'ogrinfo -json DBGT_10K_22_V01.gdb'
# lista_demain.csv ottenuto da: 'ogrinfo -json DBGT_10K_22_V01.gdb | jq -r '.domains|keys[]''
# crea cartella per i dati, se non esiste
mkdir -p "$folder"/data
# rimuovi i file csv, se esistono
find "$folder"/data -type f -name '*.csv' -delete
while IFS="" read -r domain; do
jq -r '.domains.'"$domain"'.codedValues' dbgt10k_fc_domain.json |
mlr --j2c reshape -r '.' -o k,v >"$folder"/data/"$domain".csv
done <lista_demain.csv
Dati
- download file pesante +5 GB
- dbgt10k_fc_domain.json
Riferimenti utili
- ogr2ogr: https://gdal.org/programs/ogr2ogr.html
- jq: https://stedolan.github.io/jq/
- Miller (mlr): https://miller.readthedocs.io/
Ultima modifica 17/02/2023: update tags (c76599d)