opendatasicilia / tansignari

"T'ansignari e t'appeddiri"
http://tansignari.opendatasicilia.it
Creative Commons Attribution 4.0 International
18 stars 10 forks source link

[script] estrarre dati da un file json #237

Closed pigreco closed 1 year ago

pigreco commented 1 year ago

Con ogr2ogr 3.7 e il seguente costrutto, ho estratto un file json:

ogrinfo -json test.gdb

dal file dovrei estrarre, per ogni feature class i field domainName: sotto un estratto:

      "name":"AC_VEI_AC_VEI_SUP_SR",
      "metadata":{
      },
      "geometryFields":[
        {
          "name":"Shape",
          "type":"MultiPolygonZ",
          "nullable":true,
          "extent":[
            428021.97790000029,
            4304053.6132999994,
            570065.5532999998,
            4567908.8734000009
.......
      "featureCount":212496,
      "fidColumnName":"OBJECTID",
      "fields":[
        {
          "name":"AC_VEI_SED",
          "type":"String",
          "width":255,
          "nullable":false,
          "uniqueConstraint":false,
          "alias":"Sede",
          "domainName":"H_AC_VEI_Sede"
        },
        {
          "name":"ClassREF",
          "type":"String",
          "width":255,
          "nullable":false,
          "uniqueConstraint":false
        },
        {
          "name":"AC_VEI_FON",
          "type":"String",
          "width":255,
          "nullable":false,
          "uniqueConstraint":false,
          "alias":"Fondo",
          "domainName":"H_AC_VEI_Fondo"
        },
        {
          "name":"SubRegID",
          "type":"String",
          "width":255,
          "nullable":false,
          "uniqueConstraint":false
        },
        {
          "name":"AC_VEI_LIV",
          "type":"String",
          "width":255,
          "nullable":false,
          "uniqueConstraint":false,
          "alias":"Livello",
          "domainName":"D_AC_VEI_Livello"
        },
        {
          "name":"AC_VEI_ZON",
          "type":"String",
          "width":255,
          "nullable":false,
          "uniqueConstraint":false,
          "alias":"Zona",
          "domainName":"H_AC_VEI_Zona"
        },
        {
          "name":"Shape_Length",
          "type":"Real",
          "nullable":true,
          "uniqueConstraint":false,
          "defaultValue":"FILEGEODATABASE_SHAPE_LENGTH"
        },
        {
          "name":"Shape_Area",
          "type":"Real",
          "nullable":true,
          "uniqueConstraint":false,
          "defaultValue":"FILEGEODATABASE_SHAPE_AREA"
        }
      ]
    }

dovrei ottenere:

feature_class lista domainName
AC_VEI_AC_VEI_SUP_SR H_AC_VEI_Sede, H_AC_VEI_Fondo, D_AC_VEI_Livello, H_AC_VEI_Zona

qui il file:

toto.zip

aborruso commented 1 year ago

caro @pigreco non riesco a commentarlo al momento.

Se ho capito bene vuoi l'output di

 <toto.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

Uso jq e Miller

andy.zip

Qualche commento:

pigreco commented 1 year ago

questo è l'output richiesto:

image

per ottenere una riga per ogni dominio, occorre usare questo costrutto:

 <toto.json jq '.layers[]|{name:.name,fields:.fields[].domainName}' | mlr --j2c unsparsify then filter '!is_null($fields)' then sort -f name,fields

ottenendo:

image

pigreco commented 1 year ago

Ricetta fatta e pubblicata

https://tansignari.opendatasicilia.it/ricette/bash/estrarre_dati_da_file_json/