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

如何在未知JSON结构前提下将其所有值扁平化提取为列表(Python实现)

嵌套结构全值扁平化提取Python实现

原有方案问题

  • 方法1:递归调用的返回值未合并到当前结果列表,且未兼容输入为list/tuple的遍历逻辑,导致残留dict等嵌套结构
  • 方法2:类型判断逻辑混乱,递归结果未合并,额外的字符串校验逻辑反而拦截了合法数值类型的提取,导致结果缺失

正确实现代码

def format_data(self, data):
    result = []
    # 处理字典类型:遍历所有值递归
    if isinstance(data, dict):
        for value in data.values():
            result.extend(self.format_data(value))
    # 处理列表/元组类型:遍历所有元素递归
    elif isinstance(data, (list, tuple)):
        for item in data:
            result.extend(self.format_data(item))
    # 其他类型为叶子节点,直接加入结果
    else:
        result.append(data)
    return result

测试验证

输入JSON解析后对象(已用json.loads转为Python对象)

{
    "timezone": "UTC",
    "serverTime": 1637752583921,
    "rateLimits": [
        {
            "rateLimitType": "REQUEST_WEIGHT",
            "interval": "MINUTE",
            "intervalNum": 1,
            "limit": 1200
        },
        {
            "rateLimitType": "ORDERS",
            "interval": "SECOND",
            "intervalNum": 10,
            "limit": 50
        },
        {
            "rateLimitType": "ORDERS",
            "interval": "DAY",
            "intervalNum": 1,
            "limit": 160000
        },
        {
            "rateLimitType": "RAW_REQUESTS",
            "interval": "MINUTE",
            "intervalNum": 5,
            "limit": 6100
        }
    ],
    "exchangeFilters": [],
}

输出结果

["UTC", 1637752583921, "REQUEST_WEIGHT", "MINUTE", 1, 1200, "ORDERS", "SECOND", 10, 50, "ORDERS", "DAY", 1, 160000, "RAW_REQUESTS", "MINUTE", 5, 6100]

完全匹配预期的全值扁平化要求,支持任意层级的dict、list、tuple嵌套结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:06:03