首页 > 其他分享 >更改json节点key

更改json节点key

时间:2023-01-06 14:35:16浏览次数:41  
标签:Object json key path root 节点

json节点key更改,给朋友写的小tool,顺便记录一下

/**
 * 需要转义的key对象
 *     原key: 新key
 */
const jsonKeysTo = {
    'a': 'new_a',
    'b': 'new_b',
    'c>0>a': 'new_c'
};

/**
 * 数据对象
 */
let json = {
    a: 'aaa',
    b: 123,
    c: [
        {
            a: 1,
            f: 2
        },{
            a: 1
        }
    ]
};

/**
 * 遍历并替换key
 * @param {Object} root 当前遍历对象
 * @param {Object} path 当前遍历节点路径
 * @param {Object} data_source 源数据对象
 */
function jsonNodeRead(root, path, data_source) {
    let tpkey;
    if (!path) {
        path = [];
    }
    if (!data_source) {
        data_source = root;
    }
    Object.keys(root).forEach(k => {
        if (typeof root[k] == 'object') { // 如果是对象则继续遍历
            jsonNodeRead(root[k], path.concat(k), data_source);
        } else {
            jsonNodeTo(data_source, path.concat(k));
        }
    });
}

/**
 * @param {Object} root 数据源
 * @param {Object} path 节点路径(数组)
 */
function jsonNodeTo(root, path) {
    let toKey = path.join('>');
    if (jsonKeysTo.hasOwnProperty(toKey)) {
        let tp = eval('root["' + path.join('"]["') + '"]'); // 取出节点对象
        eval('delete root["' + path.join('"]["') + '"]'); // 删除节点
        path.pop(); // 删除最后一个元素
        path.push(jsonKeysTo[toKey]); // 追加元素
        eval('root["' + path.join('"]["') + '"] = tp'); // 添加节点
    }
}

console.log(JSON.parse(JSON.stringify(json)));    
jsonNodeRead(json);
console.log(json);

 

标签:Object,json,key,path,root,节点
From: https://www.cnblogs.com/sanrenblog/p/17030371.html

相关文章