如何爆炸另一个复杂的嵌套json

问题描述 投票:0回答:1

我正在寻找将这个 json 树分解为像

'IMPORTO_NOMINALE'

这样的元素

png

{
  "AIUTO": [
    {
      "CAR": "16549",
      "TITOLO_MISURA": "[Titolo II - capo 1, 2, 3, 4, 5, 6] Regolamento regionale della Puglia per gli aiuti in esenzione (Reg. regionale n. 17 del 30/09/2014-BURP 06/10/2014) - Aiuti a finalità regionale",
      "DES_TIPO_MISURA": "Regime di aiuti",
      "COD_CE_MISURA": "SA.60770",
      "BASE_GIURIDICA_NAZIONALE": "Regolamento della Puglia per gli aiuti compatibili con il mercato interno ai sensi del TFUE ( Regolamento regionale della Puglia per gli aiuti in esenzione)",
      "IDENTIFICATIVO_UFFICIO": "3230",
      "SOGGETTO_CONCEDENTE": "Regione Puglia - Dipartimento Sviluppo Economico",
      "COR": "16364774",
      "TITOLO_PROGETTO": "SVILUPPO DI TECNOLOGIE SOFTWARE BASATE SU PROTOCOLLO D2D SU RETI UHS E 5G E ALGORITMI DI MACHINE LEARNING E NATURAL LANGUAGE PROCESSING",
      "DESCRIZIONE_PROGETTO": "SVILUPPO DI TECNOLOGIE SOFTWARE BASATE SU PROTOCOLLO D2D SU RETI UHS E 5G E ALGORITMI DI MACHINE LEARNING E NATURAL LANGUAGE PROCESSING",
      "LINK_TRASPARENZA_NAZIONALE": "http://www.regione.puglia.it/documents/10192/4782589/N139+suppl_06_10_14.pdf/407e8e4e-ccc7-457e-a69d-f2d5f4ac1365?version=1.0",
      "DATA_CONCESSIONE": "2023-12-01+01:00",
      "CUP": "n.d.",
      "ATTO_CONCESSIONE": "1023",
      "LINK_ATTO_CONCESSIONE": "http://www.sistema.puglia.it/portal/page/portal/SistemaPuglia/Determinazioni",
      "DENOMINAZIONE_BENEFICIARIO": "EULOTECH S.R.L.",
      "CODICE_FISCALE_BENEFICIARIO": "01292030770",
      "DES_TIPO_BENEFICIARIO": "PMI",
      "REGIONE_BENEFICIARIO": "Puglia",
      "COMPONENTI_AIUTO": {
        "COMPONENTE_AIUTO": {
          "ID_COMPONENTE_AIUTO": "17824039",
          "COD_PROCEDIMENTO": "3",
          "DES_PROCEDIMENTO": "Esenzione",
          "COD_REGOLAMENTO": "CE651/2014",
          "DES_REGOLAMENTO": "Reg. CE 651/2014 esenzione generale per categoria (GBER) e ss.mm.ii",
          "COD_OBIETTIVO": "500202",
          "DES_OBIETTIVO": "Aiuti a finalità regionale — Aiuti agli investimenti (art. 14) — Regime",
          "SETTORE_ATTIVITA": "J.62.0",
          "STRUMENTI_AIUTO": {
            "STRUMENTO_AIUTO": {
              "COD_STRUMENTO": "2",
              "DES_STRUMENTO": "Sovvenzione/Contributo in conto interessi",
              "ELEMENTO_DI_AIUTO": "59175.00",
              "IMPORTO_NOMINALE": "131500.00"
            }
          }
        }
      }
    }
  ]
}

这个脚本非常合规,但仅爆炸每个第一个元素:

with open(filename, 'r',encoding='utf-8') as myfile:
    data=myfile.read()
obj = json.loads(data)
df = pd.json_normalize(obj['AIUTO'])

我做错了什么?

我也尝试了两种解决方案:

import pandas as pd
from glom import glom
df = pd.read_json(filename)
prova = df['AIUTO'].apply(lambda row: glom(row, 'COMPONENTI_AIUTO'))

exploded_df = df.explode('AIUTO')
exploded_df
python json pandas parsing nested
1个回答
0
投票

给定示例数据并且您要查找具有三列的行:

CODICE_FISCALE_BENEFICIARIO, ID_COMPONENTE_AIUTO, IMPORTO_NOMINALE

您可以重塑您的 json/字典,例如:

results = [
    {
        "CODICE_FISCALE_BENEFICIARIO": item["CODICE_FISCALE_BENEFICIARIO"],
        "ID_COMPONENTE_AIUTO": item["COMPONENTI_AIUTO"]["COMPONENTE_AIUTO"]["ID_COMPONENTE_AIUTO"],
        "IMPORTO_NOMINALE": item["COMPONENTI_AIUTO"]["COMPONENTE_AIUTO"]["STRUMENTI_AIUTO"]["STRUMENTO_AIUTO"]["IMPORTO_NOMINALE"]
    }
    for item in data["AIUTO"]
]

然后将其加载到 pandas 或任何你喜欢的东西中:

import pandas
print(pandas.DataFrame(results))

会给你:

  CODICE_FISCALE_BENEFICIARIO ID_COMPONENTE_AIUTO IMPORTO_NOMINALE
0                 01292030770            17824039        131500.00
© www.soinside.com 2019 - 2024. All rights reserved.