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

如何通过编程实现嵌套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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:52:10