【问题标题】:How to create JSON file with nested values from simple Python list如何从简单的 Python 列表创建具有嵌套值的 JSON 文件
【发布时间】:2021-11-02 03:23:21
【问题描述】:

我有一个这样的列表:

id: 0 --------------------------------------------------------------------------------
Roma
Via Francesco Saverio Altamura
Via: 0
https://www.immobiliare.it/annunci/p-147276/
tipologia: Appartamento
m2: 113 m²
piano: 1°, con ascensore
p_edificio: 4 piani
prezzo: € 158.000 - € 270.000
balcone: 0
cantina: 0
terrazza: 0
giardino privato: 0
taverna: 0
esposizione esterna: 0
id: 1 --------------------------------------------------------------------------------
Roma
Monti
Via degli Zingari
https://www.immobiliare.it/annunci/89886713/
tipologia: Appartamento
m2: 113 m²
piano: 1°, con ascensore
p_edificio: 4 piani
prezzo: € 790.000
balcone: 0
cantina: 0
terrazza: 0
giardino privato: 0
taverna: 0
esposizione esterna: 0

而我想做的是以这种形式创建一个带有嵌套对象的 JSON 文件,如下所示:

{
"id": "123": [
    "city": "Roma",
    "zone": "Via Francesco Saverio Altamura",
    "via": "0",
    "link": "https://www.immobiliare.it/annunci/p-147276/",
    "prezzo": "€ 158.000 - € 270.000"
    "addons": [
        {
            "balcone": "0",
            "terrazza": "0",
             and so on...
        },
    ]
]
}

我遇到的问题是键值部分。

我可以做一个简单的:json.dump...,但它会为每个 JSON 对象转储一个项目列表。 相反,我希望将 id 作为主要对象以及其中的所有其他信息。

也就是说,我的列表中有 300 个项目,我有 5 个 ID,然后全部归结为 5 个对象,每个对象都包含属于该 ID 的项目。

你们知道任何简单的解决方案吗?谢谢!

【问题讨论】:

标签: python json list


【解决方案1】:

使用https://stackoverflow.com/a/69032525/1491895 中的“选项 2:列出 JSON”将您的输入转换为字典列表。然后您可以按常见的id 值对它们进行分组。

dict_json = {}
for d in list_json:
    dict_json.setdefault(d['id'], []).append(d)

这将产生如下结果:

{
    "123": [{
        "id": "123",
        "city": "Roma",
        "zone": "Via Francesco Saverio Altamura",
        "via": "Via: 0",
        "link": "https://www.immobiliare.it/annunci/p-147276/",
        "addons": {
            "tipologia": "Appartamento",
            "m2": "113 m\u00b2",
            "piano": "1\u00b0, con ascensore",
            "p_edificio": "4 piani",
            "balcone": "0",
            "cantina": "0",
            "terrazza": "0",
            "giardino privato": "0",
            "taverna": "0",
            "esposizione esterna": "0"
        },
        "prezzo": "\u20ac 158.000 - \u20ac 270.000"
    },
    {
        "id": "123",
        "city": "Roma",
        "zone": "Monti",
        "via": "Via degli Zingari",
        "link": "https://www.immobiliare.it/annunci/89886713/",
        "addons": {
            "tipologia": "Appartamento",
            "m2": "113 m\u00b2",
            "piano": "1\u00b0, con ascensore",
            "p_edificio": "4 piani",
            "balcone": "0",
            "cantina": "0",
            "terrazza": "0",
            "giardino privato": "0",
            "taverna": "0",
            "esposizione esterna": "0"
        },
        "prezzo": "\u20ac 790.000"
    }]
}

【讨论】:

    【解决方案2】:

    您可以获得这样的解决方案:

    {
        "id": "123",
        "values": 
        {
            "city": "Roma",
            "zone": "Via Francesco Saverio Altamura",
            "via": "0",
            "link": "https://www.immobiliare.it/annunci/p-147276/",
            "prezzo": "€ 158.000 - € 270.000"
            "addons": 
                {
                    "balcone": "0",
                    "terrazza": "0",
                    and so on...
                }
        }
    }
    

    如上所述创建字典并将其转换为带有 json 库的 json:

    import json
    
    
    data = {
        "id": "123",
        "values": 
        {
            "city": "Roma",
            "zone": "Via Francesco Saverio Altamura",
            "via": "0",
            "link": "https://www.immobiliare.it/annunci/p-147276/",
            "prezzo": "€ 158.000 - € 270.000"
            "addons": 
                {
                    "balcone": "0",
                    "terrazza": "0",
                    and so on...
                }
        }
    }
    
    json_data = json.dumps(data, indent = 4)
    
    print(json_data)
    
    

    (这个例子是为了打印你的json,如果你愿意,你可以生成一个json文件。

    【讨论】:

      猜你喜欢
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2021-08-13
      • 2014-06-08
      • 1970-01-01
      相关资源
      最近更新 更多