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

如何修改JSON扁平化Python函数以支持嵌套列表结构?

嵌套JSON扁平化(支持含列表结构)

原有的flattenjson函数仅支持纯字典嵌套的JSON,处理包含列表的嵌套结构时会触发AttributeError(列表无keys属性),且无法解析列表内部的嵌套数据。

原函数代码:

def flattenjson(b, delim):
    val = {}
    for i in b.keys():
        if isinstance(b[i], dict):
            get = flattenjson(b[i], delim)
            for j in get.keys():
                val[i + delim + j] = get[j]
    
        else:
            val[i] = b[i]
            
    return val

修改后的函数(支持列表)

def flattenjson(b, delim):
    val = {}
    
    def flatten(item, prefix=''):
        if isinstance(item, dict):
            for key, value in item.items():
                flatten(value, prefix + key + delim)
        elif isinstance(item, list):
            for idx, elem in enumerate(item):
                flatten(elem, prefix + str(idx) + delim)
        else:
            # 移除键末尾多余的分隔符
            key = prefix[:-len(delim)] if prefix else str(item)
            val[key] = item
    
    flatten(b)
    return val

关键修改说明

  • 新增列表类型判断,遍历列表时将索引作为键的一部分,保留元素的位置顺序
  • 用内部递归函数flatten统一处理字典、列表和普通值,简化逻辑结构
  • 自动清理键末尾的冗余分隔符,避免生成user.0.name.这类无效键

示例使用

假设输入带列表的JSON数据:

sample_json = {
    "user": {
        "name": "Alice",
        "orders": [
            {"id": 1, "product": "Laptop"},
            {"id": 2, "product": "Phone"}
        ]
    }
}

调用flattenjson(sample_json, '.')后得到的扁平化结果:

{
    "user.name": "Alice",
    "user.orders.0.id": 1,
    "user.orders.0.product": "Laptop",
    "user.orders.1.id": 2,
    "user.orders.1.product": "Phone"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:50:25