如何通过编程实现嵌套JSON对象的扁平化?
嵌套JSON对象扁平化实现方案
需求是将嵌套结构的JSON对象转换为键以.连接的扁平结构,示例如下:
原始嵌套JSON:
{ "root": { "sub": 1, "sub2": 2 }, "root2": 3 }
转换后扁平JSON:
{ "root.sub": 1, "root.sub2": 2, "root2": 3 }
核心实现思路
通过递归遍历处理嵌套对象:
- 维护一个结果对象存储最终扁平结构
- 遍历当前对象的每个键值对,若值为对象则递归处理,同时拼接父键与子键作为新的键前缀;若值为非对象类型,直接将拼接后的键和对应值存入结果对象
JavaScript 实现代码
function flattenJson(obj, prefix = '', result = {}) { for (const [key, value] of Object.entries(obj)) { const newKey = prefix ? `${prefix}.${key}` : key; // 判断是否为纯对象(排除数组、null) if (typeof value === 'object' && value !== null && !Array.isArray(value)) { flattenJson(value, newKey, result); } else { result[newKey] = value; } } return result; } // 测试 const nestedData = { "root": { "sub": 1, "sub2": 2 }, "root2": 3 }; const flattenedData = flattenJson(nestedData); console.log(JSON.stringify(flattenedData, null, 2));
Python 实现代码
def flatten_json(obj, prefix='', result=None): if result is None: result = {} for key, value in obj.items(): new_key = f"{prefix}.{key}" if prefix else key if isinstance(value, dict): flatten_json(value, new_key, result) else: result[new_key] = value return result # 测试 nested_data = { "root": { "sub": 1, "sub2": 2 }, "root2": 3 } flattened_data = flatten_json(nested_data) print(flattened_data)
扩展说明
上述代码支持多层嵌套的对象处理,比如如果存在root.sub.sub3: 4这样的深层结构,会自动转换为"root.sub.sub3": 4。如果需要兼容数组类型,可以在判断条件中添加数组的处理逻辑(比如将数组索引作为键的一部分)。
内容的提问来源于stack exchange,提问作者Lars S.K.
相关产品推荐
相关产品推荐

