js实现json折叠
时间: 2024-09-10 12:11:33 浏览: 21
JavaScript实现JSON折叠通常指的是将一个扁平化的JSON数据转换为具有嵌套结构的JSON数据。这种转换往往需要一个键值对的映射表来重建原始的嵌套关系。扁平化JSON数据是指将所有嵌套的数据转换为一级键值对的形式,而折叠则是逆过程,将扁平化数据还原为嵌套结构。
以下是一个简单的JavaScript函数,用于将扁平化的JSON数据折叠为嵌套结构:
```javascript
function foldJson(json, keyMap) {
const folded = {};
for (const [key, value] of Object.entries(json)) {
// 判断当前键是否是需要折叠的字段,例如 'a.b' 表示 'a' 是一个对象,'b' 是 'a' 的属性
const keys = key.split('.');
if (keys.length > 1) {
let reference = folded;
const lastKey = keys.pop(); // 获取最后一个键,用来访问或创建嵌套的对象
for (const k of keys) {
// 如果还没有创建这个键对应的对象,就先创建
if (reference[k] === undefined) {
reference[k] = {};
}
reference = reference[k]; // 进入到下一个层级
}
// 将扁平化数据的值赋给当前的嵌套对象
reference[lastKey] = value;
} else {
// 如果键不是嵌套的,就直接赋值
folded[key] = value;
}
}
return folded;
}
```
使用这个函数的例子:
```javascript
const flatJson = {
'name': 'John Doe',
'address.street': '123 Main St',
'address.city': 'Anytown',
'address.zip': '12345'
};
const keyMap = {
'address.street': 'address/street',
'address.city': 'address/city',
'address.zip': 'address/zip'
};
const foldedJson = foldJson(flatJson, keyMap);
console.log(foldedJson);
// 输出:{ name: 'John Doe', address: { street: '123 Main St', city: 'Anytown', zip: '12345' } }
```
通过使用这个`foldJson`函数,扁平化的JSON数据可以根据提供的键映射表被转换成嵌套的结构。