JSON 扁平化与反扁平化:实用指南

jsonflattendata-transformationcsv

扁平化 JSON 将嵌套对象转换为点号表示法的键。这对于数据库、电子表格和某些 API 格式至关重要。

什么是 JSON 扁平化?

嵌套 JSON:

{

"user": {

"name": "Alice",

"address": {

"city": "New York",

"zip": "10001"

}

},

"tags": ["admin", "dev"]

}

扁平化后:

{

"user.name": "Alice",

"user.address.city": "New York",

"user.address.zip": "10001",

"tags.0": "admin",

"tags.1": "dev"

}

扁平化实现

function flatten(obj, prefix = '') {

const result = {};

for (const [key, value] of Object.entries(obj)) {

const newKey = prefix ? ${prefix}.${key} : key;

if (value && typeof value === 'object' && !Array.isArray(value)) {

Object.assign(result, flatten(value, newKey));

} else {

result[newKey] = value;

}

}

return result;

}

反扁平化实现

function unflatten(obj) {

const result = {};

for (const [key, value] of Object.entries(obj)) {

const keys = key.split('.');

let current = result;

for (let i = 0; i < keys.length - 1; i++) {

current[keys[i]] = current[keys[i]] || {};

current = current[keys[i]];

}

current[keys[keys.length - 1]] = value;

}

return result;

}

使用场景

  • CSV 导出 — 转换为 CSV 行之前先扁平化
  • 数据库存储 — 将嵌套数据存储在扁平列中
  • 表单数据 — 将表单字段转换为嵌套对象
  • 翻译文件 — 扁平键更容易管理
  • 环境变量 — 使用 ___ 作为分隔符
  • 使用我们的 JSON 转 CSV 工具将扁平化的 JSON 导出到电子表格。

    相关工具