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

单个指定

每一个需要修改的key,都需要指定

/**
* 需要转义的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);

模糊匹配

用的是正则匹配,可能含有小bug

/**
* 需要转义的key对象
* 原key -> 新key
* 原key: >指向子节点,杠*杠为通配符,key最终转为正则对象
* 新key: 字符串
*/
const jsonKeysTo = {
'a': 'new_a',
'b': 'new_b',
'c>/*/>a': '3_c',
'c>/*/>/*/>a': '4_c'
}; /**
* 数据对象
* key内不能含有>符号
*/
let json = {
a: 'aaa',
b: 123,
c: [
{
a: 1,
f: 2
},{
a: 1,
f: 2,
'd发!!。、——1': {
a: 123
}
}
]
}; /**
* 遍历并替换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('>'), toVal;
let keys = Object.keys(jsonKeysTo);
let toRegex = '[\\u4e00-\\u9fa5\\d\\w\\s\\-\\_\\+\\^\\$\\|\\&\\*\\?\\.\\(\\)\\{\\}\\[\\]~@#%=<!!。—《》【】‘“::、,,?]+';
let to = false;
for(let i = 0; i < keys.length; i++) {
// console.log('^' + keys[i].replace(/\/\*\//g, toRegex) + '$', ' --> ', toKey);
if (new RegExp('^' + keys[i].replace(/\/\*\//g, toRegex) + '$').test(toKey)) {
console.log(keys[i], ' --> ', toKey);
to = true;
toVal = jsonKeysTo[keys[i]];
break;
}
}
if (to) {
let tp = eval('root["' + path.join('"]["') + '"]'); // 取出节点对象
eval('delete root["' + path.join('"]["') + '"]'); // 删除节点
path.pop(); // 删除最后一个元素
path.push(toVal); // 追加元素
eval('root["' + path.join('"]["') + '"] = tp'); // 添加节点
}
} console.log(JSON.parse(JSON.stringify(json)));
jsonNodeRead(json);
console.log(json);

更改json节点key的更多相关文章

  1. js 更改json的 key

    let t = data.map(item => { return{ fee: item['费用'], companyName1: item.companyName, remark1: item ...

  2. java 扁平化输出json所有节点key/value

    本章主要介绍用java实现扁平化输出json所有节点key/value(包含所有内层子节点) 1.json结构 目的输出bill_list下的datalist里的子节点key/value 2.实现代码 ...

  3. c++中对于json的key不带双引号的问题修复

    在引用了第三方数据时,数据源通过转义,将json的key上双引号给去掉了. 在PHP开发时,可以通过正则表达式替换方式来补充丢失的双引号,处理代码如下 function ex_json_decode( ...

  4. fastjson转换json字符串key的首字母小写变大写的解决办法

    https://blog.csdn.net/erbao_2014/article/details/53688934 问题描述在开发过程中,由于接口文档的描述,要求json字符串的key首字母为大写,而 ...

  5. 对json数据key进行替换

    原文:https://blog.csdn.net/qq_39750658/article/details/83411897 import java.util.HashMap; import java. ...

  6. js遍历json的key和value

    遍历json对象: 无规律: <script> var json = [{dd:'SB',AA:'东东',re1:123},{cccc:'dd',lk:'1qw'}]; for(var i ...

  7. 转:js获取json中key所对应的value值

    <script type="text/javascript"> getJson('age'); function getJson(key){ var jsonObj={ ...

  8. C# parser JSON get Key and value

    /*********************************************************************** * C# parser JSON get Key an ...

  9. js json按key值排序

    最近有个需求需要把json按key值进行排序,可是js并没有直接的函数可以对json进行排序的这么办呢? 然后想到了一个间接的方法来实现: 1.将json中的key值取出,存在一个数组中,然后对这个数 ...

  10. Python解析非标准JSON(Key值非字符串)

    采集数据的时候经常碰到一些JSON数据的Key值不是字符串,这些数据在JavaScript的上下文中是可以解析的,但在Python中,没有该部分数据的上下文,无法采用json.loads(JSON)的 ...

随机推荐

  1. zabbix企业监控

    第一节.系统初始化 1.前期环境 主机名 IP地址 操作系统 备注 zabbix-10 192.168.2.10 CentOS Linux release 7.4 zabbix服务端 agent-15 ...

  2. IDEA快速生成数据库表的实体类

    IDEA连接数据库 IDEA右边侧栏有个DataSource,可以通过这个来连接数据库,我们先成功连接数据库 点击进入后填写数据库进行连接,注意记得一定要去Test Connection 确保正常连接 ...

  3. 1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖(最详细的讲解1NF、2NF、3NF的关系)

    1NF | 2NF | 3NF的区分以及什么是函数依赖.部分函数依赖.值传递依赖 符合3NF一定符合2NF.一定符合1IF 简单区分.2NF不存在部分函数依赖,3NF不存在传递函数依赖 第一范式1NF ...

  4. NLP之TextRNN(预测下一个单词)

    TextRNN @ 目录 TextRNN 1.基本概念 1.1 RNN和CNN的区别 1.2 RNN的几种结构 1.3 多对多的RNN 1.4 RNN的多对多结构 1.5 RNN的多对一结构 1.6 ...

  5. 论文笔记 - Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity

    prompt 的影响因素 Motivation Prompt 中 Example 的排列顺序对模型性能有较大影响(即使已经校准参见好的情况下,选取不同的排列顺序依然会有很大的方差): 校准可以大幅度提 ...

  6. python进阶(26)collections标准库

    前言 这个模块实现了特定目标的容器,以提供Python标准内建容器dict ,list ,set , 和tuple 的替代选择. 这个模块提供了以下几个函数 函数 作用 namedtuple() 创建 ...

  7. Oracle:ORA-00911: invalid character解决办法

    问题记录:用jmeter执行sql语句,报错:ORA-00911: invalid character. 解决方法:sql语句末尾";"导致,去掉即可解决. 过程记录: 使用jme ...

  8. fastjson远程代码执行漏洞

    fastjson漏洞学习记录 免责声明: Fastjson 1.2.24 远程代码执行漏洞 漏洞说明 前提条件 影响范围 漏洞复现 Fastjson<=1.2.47 远程代码执行漏洞 Fastj ...

  9. golang 简书

    https://www.jianshu.com/p/548adff0d10d Go 入门指南 https://github.com/wuxiaoxiaoshen/go-example-for-live ...

  10. Gorm源码学习-数据库连接

    1 前言 gorm源码地址: Gorm , 本文基于commit:cef3de694d9615c574e82dfa0b50fc7ea2816f3e 官方入门指南: Dosc 2 连接数据库代码示例 目 ...