首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从包含键和值映射的行列表中创建嵌套JSON文件

从包含键和值映射的行列表中创建嵌套JSON文件
EN

Stack Overflow用户
提问于 2021-09-02 13:47:36
回答 2查看 140关注 0票数 1

复杂的标题,让我解释一下:)

我有一个充满循环数据的数组,格式如下:

代码语言:javascript
复制
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文件,而不是简单地将这个数组转储到文件中,我想创建一个很好的结构,如以下示例所示:

代码语言:javascript
复制
{
"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...
        },
    ]
}

到目前为止,我不需要组织它,但是现在在实现了一个很好的数组之后,循环数据为每个id输出了16个带有"key":"value“的元组,我需要组织它,并且不能理解如何做我需要它。

欢迎任何关于学习和理解这个过程的帮助!

EN

回答 2

Stack Overflow用户

发布于 2021-09-02 13:54:58

来自内置json模块的json.dumps很好地处理了这一点,您只需首先将对象转换为表示该结构的字典。

票数 1
EN

Stack Overflow用户

发布于 2021-09-02 14:46:49

假设输入数据在字段上有固定的顺序,这是一个使用正则表达式的解决方案。

代码语言:javascript
复制
import re

data = """
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
"""

data_fixed_keys = [
    "id",
    "city",
    "zone",
    "via",
    "link",
    "tipologia",
    "m2",
    "piano",
    "p_edificio",
    "prezzo",
    "balcone",
    "cantina",
    "terrazza",
    "giardino privato",
    "taverna",
    "esposizione esterna",
]

matches = re.findall(
    r"id: (?P<id>.*)\s+"
    "(?P<city>.*)\s+"
    "(?P<zone>.*)\s+"
    "(?P<via>.*)\s+"
    "(?P<link>.*)\s+"
    "tipologia: (?P<tipologia>.*)\s+"
    "m2: (?P<m2>.*)\s+"
    "piano: (?P<piano>.*)\s+"
    "p_edificio: (?P<p_edificio>.*)\s+"
    "prezzo: (?P<prezzo>.*)\s+"
    "balcone: (?P<balcone>.*)\s+"
    "cantina: (?P<cantina>.*)\s+"
    "terrazza: (?P<terrazza>.*)\s+"
    "giardino privato: (?P<giardino_privato>.*)\s+"
    "taverna: (?P<taverna>.*)\s+"
    "esposizione esterna: (?P<esposizione_esterna>.*)",
    data,
)

""" Option 1: Dictionary JSON """
data_json = {}
for match in matches:
    current_dict = dict(zip(data_fixed_keys[1:5], match[1:5]))
    current_dict["addons"] = dict(zip(data_fixed_keys[5:], match[5:]))
    current_dict["prezzo"] = current_dict["addons"].pop("prezzo")
    data_json[match[0]] = current_dict

""" Option 2: List JSON
data_json = []
for match in matches:
    current_dict = dict(zip(data_fixed_keys[:5], match[:5]))
    current_dict["addons"] = dict(zip(data_fixed_keys[5:], match[5:]))
    current_dict["prezzo"] = current_dict["addons"].pop("prezzo")
    data_json.append(current_dict)
"""

print(data_json)

输出(打印精美)

代码语言:javascript
复制
# If using Option 1 (Dictionary JSON)
{
    "0": {
        "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"
    },
    "1": {
        "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"
    }
}

# If using Option 2 (List JSON)
[
    {
        "id": "0",
        "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": "1",
        "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"
    }
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69031565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档