node.js使用变量搜索并替换json输出中的精确字符串

时间:2017-08-14 18:23:04

标签: javascript json

我发现了很多帖子,展示了如何在使用通配符或直接搜索字符串时搜索和替换引号之间的确切字符串。但是,当在for循环中使用变量时,我无法获得正确的语法。

我在db的json输出中有许多键,

myJson = JSON.stringify(rowsMap);

给出

{
  "myStuff": [
    {
      "abc": "val_de_1",
      "abcxz": "val_xc_1",
      "mnabc": "val_abc_1"
    },
    {
      "abc": "val_de_2",
      "abcxz": "val_xc_2",
      "mnabc": "val_abc_2"
    },
    {
      "abc": "val_de_3",
      "abcxz": "val_xc_3",
      "mnabc": "val_abc_3"
    }
}

现在我想循环使用JSON并使用第二个k:v对替换一些关键字符串

 for (var myVal in myPairs) {
        myJson = myJson.replace(RegExp(myVal, "g"), myPairs[myVal]);
        ....
        }

现在,如果值为abc777,我会得到以下内容,

{
      "myStuff": [
        {
          "777": "val_de_1",
          "777xz": "val_xc_1",
          "mn777": "val_777_1"
        },
        {
          "777": "val_de_2",
          "777xz": "val_xc_2",
          "mn777": "val_777_2"
        },
        {
          "777": "val_de_3",
          "777xz": "val_xc_3",
          "777bc": "val_777_3"
        }
}

但我真的想要

{
      "myStuff": [
        {
          "777": "val_de_1",
          "abcxz": "val_xc_1",
          "mnabc": "val_abc_1"
        },
        {
          "777": "val_de_2",
          "abcxz": "val_xc_2",
          "mnabc": "val_abc_2"
        },
        {
          "777": "val_de_3",
          "abcxz": "val_xc_3",
          "mnabc": "val_abc_3"
        }
    }

我已经看到在文字字符串之前和之后使用括号括号和引号变体而不是变量。

最有效的处理方法是什么? 我能够以一种笨拙的方式做到这一点

for (var myVal in myPairs) {

            myNewVal = "\""+myVal+"\"";
            myNewRep = "\""+myPairs[myVal]+"\"";
            myJson = myJson.replace(RegExp(myNewVal, "g"), myNewRep);
            ....
            }

注意我正在寻找一个解决方案,其中regexp必须查找引号之间的确切字符串,不包括引号。如果找到字符串,我们的想法是只做myNewRep,从而使我的假设更快。

2 个答案:

答案 0 :(得分:4)

您可以使用/[abc]/g

替换json密钥字符串

这将替换确切的字符串。

我试过的一些比赛。

abc - 匹配 " ABC" - 比赛 abcd - 不匹配

http://www.regexpal.com/ - 试试这个来测试。

答案 1 :(得分:0)

您可以按引号

拆分字符串

' “ABC”'。匹配(/"(.*?)"/)