You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将包含键值映射的循环数据列表转换为指定嵌套JSON结构

实现方案与原理说明

前置逻辑:字段映射规则

首先根据你提供的样例数据和目标结构,先明确每个id对应16组键值对的分层规则:

  • 顶层字段(共6个):id、city、zone、via、link、prezzo
  • 附加字段(共10个):tipologia、m2、piano、p_edificio、balcone、cantina、terrazza、giardino privato、taverna、esposizione esterna,全部放入addons数组的首个对象中

代码实现(Python)

你已经拿到规整的键值对数组,可直接使用以下逻辑处理:

import json

# 你的原始规整数组,每个元素是单id对应的16组键值对列表
raw_data = [
    [("id", "0"), ("city", "Roma"), ("zone", "Via Francesco Saverio Altamura"), ("via", "0"), ("link", "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的键值对在此处补充
]

# 顶层字段白名单
top_fields = {"id", "city", "zone", "via", "link", "prezzo"}
output_list = []

for item_group in raw_data:
    temp_dict = dict(item_group)
    # 初始化结构化对象
    structured = {
        "id": temp_dict["id"],
        "city": temp_dict["city"],
        "zone": temp_dict["zone"],
        "via": temp_dict["via"],
        "link": temp_dict["link"],
        "prezzo": temp_dict["prezzo"],
        "addons": [{}]
    }
    # 填充附加字段到addons
    for key, value in temp_dict.items():
        if key not in top_fields:
            structured["addons"][0][key] = value
    output_list.append(structured)

# 导出为嵌套JSON文件
with open("structured_property.json", "w", encoding="utf-8") as f:
    json.dump(output_list, f, ensure_ascii=False, indent=2)

如果你的原始数据还只是纯行列表,没有拆成键值对,可以先执行前置拆分逻辑:

# 读取原始行数据,过滤空行
with open("raw_data.txt", "r", encoding="utf-8") as f:
    lines = [line.strip() for line in f if line.strip()]

# 按16行一组拆分,每组对应一个id的完整数据
groups = [lines[i:i+16] for i in range(0, len(lines), 16)]
raw_data = []

for group in groups:
    kv_list = []
    for idx, line in enumerate(group):
        if idx == 0:
            k, v = line.split(":", 1)
            kv_list.append((k.strip(), v.strip()))
        elif idx == 1:
            kv_list.append(("city", line))
        elif idx == 2:
            kv_list.append(("zone", line))
        elif idx == 3:
            _, v = line.split(":", 1)
            kv_list.append(("via", v.strip()))
        elif idx == 4:
            kv_list.append(("link", line))
        else:
            k, v = line.split(":", 1)
            kv_list.append((k.strip(), v.strip()))
    raw_data.append(kv_list)

实现原理说明

  1. 字段分层逻辑:将高频查询的公共属性放到顶层,低频的附加属性统一收拢到addons数组,既符合你要求的嵌套结构,也方便后续扩展单个id对应多组附加属性的场景
  2. 临时字典中转:把有序键值对转成字典后直接按键名取值,不需要硬编码字段位置,后续字段顺序调整时只需要修改映射规则即可,维护成本更低
  3. 标准化JSON导出:使用语言内置的JSON库序列化,自动处理语法格式、转义、缩进等问题,避免手动拼接字符串出现的语法错误

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:06:05