如何在未知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
相关产品推荐
相关产品推荐

