Python:解码JSON记录时忽略内部'value'键实现数据扁平化处理
递归处理嵌套JSON提取value键的实现方案
你可以通过递归遍历函数实现全层级的value键提取,逻辑完全兼容你现有单层推导式的处理规则,同时支持任意深度的字典、列表嵌套场景:
核心实现代码
def extract_value_nodes(node): # 处理字典类型节点 if isinstance(node, dict): # 存在value键则优先提取value值继续递归处理 if "value" in node: return extract_value_nodes(node["value"]) # 无value键则递归处理字典下所有子节点 return {k: extract_value_nodes(v) for k, v in node.items()} # 处理列表/数组类型嵌套节点 if isinstance(node, list): return [extract_value_nodes(item) for item in node] # 基础类型、None等非容器类型直接返回 return node
调用方式
直接将你要处理的原始JSON对象传入函数即可,替换你原有的字典推导式逻辑:
processed_message = extract_value_nodes(message_value)
功能说明
- 完全兼容你原有逻辑:自动忽略带
value键的字典外层,直接取value对应的值 - 支持无限层级嵌套:不管
value键出现在哪一层级都会被正确提取 - 兼容数组场景:如果JSON中包含列表结构,会自动遍历处理列表内的所有元素
- 无
value键的结构会被完整保留,不会影响其他字段的结构
测试示例
输入深层嵌套的样例数据:
test_input = { "accountNumber": {"value": b"8764622708"}, "subscriberNumber": {"value": b"8764622708"}, "userProfile": { "value": { "username": {"value": "user001"}, "bindCards": [ {"cardType": {"value": "储蓄卡"}, "cardNo": {"value": "622xxxxxx"}}, {"cardType": {"value": "信用卡"}, "cardNo": {"value": "439xxxxxx"}} ] } }, "otherInfo": {"remark": "无value字段,完整保留"} }
处理后输出:
{ "accountNumber": b"8764622708", "subscriberNumber": b"8764622708", "userProfile": { "username": "user001", "bindCards": [ {"cardType": "储蓄卡", "cardNo": "622xxxxxx"}, {"cardType": "信用卡", "cardNo": "439xxxxxx"} ] }, "otherInfo": {"remark": "无value字段,完整保留"} }
处理完成后你就可以按照普通扁平化JSON的逻辑转换为CSV格式。
内容的提问来源于stack exchange,提问作者Thadeu Melo
相关产品推荐
相关产品推荐

