Javascript 如何在JAVA脚本中查找关键字、搜索第一个实例、做出决定,然后移动到子字符串进行进一步分析

Javascript 如何在JAVA脚本中查找关键字、搜索第一个实例、做出决定,然后移动到子字符串进行进一步分析,javascript,node.js,json,string,parsing,Javascript,Node.js,Json,String,Parsing,Java脚本不是我的第一语言,需要这个来编写firebase云函数,请帮助,这是我的问题: 试图将几个json差异转换为有关操作的逻辑消息,其中包括多个操作,如查找关键字、做出决定,然后继续下一个剩余字符串 以下是我在不同操作中的json差异: 添加新密钥时 {参数:{[32m+u值:{[39m[32m+defaultValue:{[39m] [32m+值:“新砷化镓”[39m[32m+}[39m[32m+}[39m}版本:{ [31m-版本号:“498”[39m[32m+版本号:“499”[3

Java脚本不是我的第一语言,需要这个来编写firebase云函数,请帮助,这是我的问题:

试图将几个json差异转换为有关操作的逻辑消息,其中包括多个操作,如查找关键字、做出决定,然后继续下一个剩余字符串

以下是我在不同操作中的json差异:

  • 添加新密钥时
  • {参数:{[32m+u值:{[39m[32m+defaultValue:{[39m] [32m+值:“新砷化镓”[39m[32m+}[39m[32m+}[39m}版本:{ [31m-版本号:“498”[39m[32m+版本号:“499”[39m[31m- 更新时间:“2021-03-09T17:57:08.755697Z”[39m[32m+更新时间: “2021-03-09T18:01:05.485532Z”[39m}

    预期输出消息:

    添加了一个新键

    关键字名称:更新的\u值

    价值:新砷化镓

    {参数:{[32m+add_config:{[39m[32m+defaultValue:{[39m] [32m+值:“测试”[39m[32m+}[39m[32m+}[39m}版本:{[31m]- 版本号:“500”[39m[32m+版本号:“501”[39m[31m- 更新时间:“2021-03-09T18:14:14.954691Z”[39m[32m+更新时间: “2021-03-09T18:19:15.276567Z”[39m}

    预期输出消息:

    添加了一个新键

    关键字名称:add_config

    值:测试

  • 删除多个关键点时:
  • {参数:{[31m-伪值:{[39m[31m-默认值:{[39m] [31m-价值:“10”[39m[31m-}[39m[31m-}[39m[31m-价值:{ [39m[31m-默认值:{[39m[31m-值:“gaa_新”[39m[31m-} [39m[31m-}[39m}版本:{[31m-版本号:“499”[39m[32m]+ 版本号:“500”[39m[31m-更新时间: “2021-03-09T18:01:05.485532Z”[39m[32m+更新时间: “2021-03-09T18:14:14.954691Z”[39m}

    预期输出消息:

    删除的现有密钥很少

    a、 关键字名称:dummy_值

    数值:10

    31m+  ->   addition of something
    31m-  ->   deletion of something
    
    b、 关键字名称:更新的\u值

    价值:新砷化镓

  • 更新相同的键值时:
  • {参数:{dummy_值:{defaultValue:{[31m-值:“100000” [39m[32m+值:“10”[39m}}}版本:{[31m-版本号: “497”[39m[32m+版本号:“498”[39m[31m-更新时间: “2021-03-09T17:45:47.053923Z”[39m[32m+更新时间: “2021-03-09T17:57:08.755697Z”[39m}

    预期输出消息:

    关键字名称:dummy_值

    旧值:100000

    新值:10

    31m+  ->   addition of something
    31m-  ->   deletion of something
    
    请帮助我如何继续,如果有任何库可以实现这一点,那么也请让我知道,如果没有,那么如何遍历字符串并对其求值

    更新1:这里我要提到我的理论方法: 当遇到“parameters”字符串时,将查找{或{31m+{31m-,根据这将分别将操作标识为已更新、已添加或已删除,并将键标识为前一个字符串:{或{32m+或{31m-,依此类推


    更新2:我在评论中使用了json diff,没有“Nina”所建议的颜色代码,但在我尝试将其发送到电子邮件实用程序时,不知何故,它没有给出正确的结果。

    您可以使用转义颜色分隔行并检查标记

    const
    进程=字符串=>{
    constlines=string.match(/\[3\dm.*\[39m/g).map(s=>s.slice(4,-4));
    设冒号=行[0]。indexOf(':'),
    i=0,
    键='';
    如果(行[0][0]=='-'&&line[1][0]=='+'&&line[0]。切片(1,冒号)===行[1]。切片(1,冒号)){
    返回[
    “更新密钥”,
    `键名:${lines[0]。切片(1,冒号).trim()}`,
    `旧值:${JSON.parse(行[0].slice(冒号+1))}`,
    `新值:${JSON.parse(行[1].slice(冒号+1))}`
    ];
    }
    while(行[i].slice(冒号+1).trim(){
    key+=(key&&“)+行[i]。切片(1,冒号)。修剪();
    冒号=行[++i].indexOf(“:”);
    }
    key+=(key&&“)+行[i]。切片(1,冒号)。修剪();
    返回[
    第[0][0]行=='-'?“删除密钥”:“添加密钥”,
    `密钥名称:${key}`,
    `值:${JSON.parse(行[i].slice(冒号+1))}`,
    ];
    },
    数据=[
    {参数:{[32m+newer_值:{[39m[32m+defaultValue:{[39m[32m+value:“gaa_新”[39m[32m+}[39m[32m+}[39m}版本:{[31m-versionNumber:“498”[39m[32m+versionNumber:“499”[39m[31m-updateTime:“2021-03-09T17:57:08.755697Z”[39m[32m+updateTime:“2021-03-09T18:01:05.4855z},,
    {参数:{[32m+add_config:{[39m[32m+defaultValue:{[39m[32m+value:“test”[39m[32m+}[39m+}[39m}版本:{[31m-versionNumber:“500”[39m[32m+versionNumber:“501”[39m-updateTime:“2021-03-09T18:14:14.954691Z”[39m[32m+updateTime:“2021-03-09T18:19:15.276567Z},
    {参数:{[31m-虚拟_值:{[39m[31m-默认值:{[39m[31m-值:10”[39m[31m-}[39m[31m-}[39m-新的_值:{[39m[31m-默认值:{[39m[31m-值:gaa_新的”[39m[31m-}[39m[31m-}[39m]版本:{[31m-版本号:499”[39m[32m+版本号:500]39m[2021-T14801:3205:Z][39m[32m+更新时间:“2021-03-09T18:14:14.954691Z”[39m}},
    {参数:{dummy_值:{defaultValue:{[31m-value:“100000”[39m[32m+value:“10”[39m}}版本:{[31m-versionNumber:“497”[39m[32m+versionNumber:“498”[39m[31m-updateTime:“2021-03-09T17:45:47.053923Z”[39m[32m+updateTime:“2021-03-09T17:57:08.755697Z”}
    ];
    console.log(data.map(process));

    。作为控制台包装{max height:100%!important;top:0;}
    您不是指JS对象吗?
    {parameters:{
    无效JSON请添加您的方法。顺便说一句,还有一些有效的数据结构