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