场景:在一个kettle交流群内,有一个小伙伴求助:大致意思是json input的输入参数的key中存在点号,凡是带点号的key都无法正确获取。
今天一起来分析下使用多种方式来解决这个问题,希望后续有人遇到此类问题时可以秒杀它,而不是花费N根头发!!!
1、json数据构造
{"id": "1","eng.name": "javaxiaojingang","chn.name": "Java小金刚" }
上述json数据中,eng.name和chn.name 两个key中都有点号。
2、json input 提取
1)使用$.eng.name和$.'eng.name' 都无法提取到该key的值,输出为null,如下图所示
2)使用javascript步骤将key中的点号替换为_
脚本如下:
function replaceDotInKeys(obj) {if (typeof obj!== 'object' || obj === null) {return obj;}if (Array.isArray(obj)) {var result = [];for (var i = 0; i < obj.length; i++) {result.push(replaceDotInKeys(obj[i]));}return result;}var newObj = {};for (var key in obj) {var newKey = key.replace(/\./g, '_');newObj[newKey] = replaceDotInKeys(obj[key]);}return newObj; }var jsonObj = JSON.parse(jsonStr); // 处理对象的键 var newObj = replaceDotInKeys(jsonObj); // 将处理后的对象转换回 JSON 字符串 var newJsonStr = JSON.stringify(newObj);
使用$.eng_name 进行提取key的值即可
3)使用$.['eng.name'] 方式提取
群里一个小伙伴经过一番研究源码&测试之后发现支持这种方式可以直接提取,如下图所示:
3、使用python插件提取
python代码如下:
import json# 定义 JSON 字符串try:# 将 JSON 字符串解析为 Python 字典data = json.loads(jsonStr)# 提取 id 的值id = data.get('id')# 提取 chn.name 的值chnName = data.get('chn.name') except json.JSONDecodeError:print("输入的不是有效的 JSON 字符串。")
写在最后
小伙伴们,你们还有其他的解决方法吗?欢迎评论区留言探讨。