【问题标题】:String replace with with unescaped curly brace in JSON字符串替换为 JSON 中未转义的大括号
【发布时间】:2019-03-16 18:18:51
【问题描述】:

我试图用双花括号替换字符串中的值(邮递员用于变量替换),但每次我尝试引用或转义大括号时,我总是得到额外的转义引号或双转义大括号,所有这些都破坏了替换:

原始字符串:

"header": [{"key": "x-device-auth","value": "\"token\""}]

OriginalString.replace('token','{{token}}')

结果:

"header":[{"key":"x-device-auth","value":"\"{{token}}\""}]

如果我搜索.replace('\"token\"','{{token}}'),我找不到匹配项。最后的字符串需要是:

"header": [{"key": "x-device-auth","value": "{{token}}"}]

【问题讨论】:

  • ('\"token\"', ... -> ('"token"', ...)

标签: javascript json postman


【解决方案1】:

您应该寻找带有转义双引号的token,因为您还想替换它们。

var originalString = '"header": [{"key": "x-device-auth","value": "\\"token\\""}]';
console.log(originalString);
console.log(originalString.replace('\\"token\\"','{{token}}'));

originalString = '"header": [{"key": "x-device-auth","value": "\"token\""}]';
console.log(originalString);
console.log(originalString.replace('"token"','{{token}}'));

我添加了两种情况,一种是原始字符串实际上包含反斜杠(第一个原始字符串定义)。第二个没有。选择最符合您实际输入的那个:-)

【讨论】:

  • 这仅在输入更改后才有效..."\\"token\\"" !== "\"token\""
  • 我假设,上面提到的输入是实际的字符串,而不是js定义。这就是为什么我添加了第一个控制台日志,以显示字符串实际上是 OP 想要转换的内容。如果将 OPs 字符串放在 JS 字符串中,不妨省略反斜杠,因为它们没有任何作用。
  • 现在,这两种情况你都有答案了 :-)
  • 感谢@ChristophHerold,因为这只是完整 JSON 对象的 sn-p,我最终做了replace(/\\\"token\\\"/g,'{{token}}'),这与您的第一种方法基本相同。诀窍是了解控制台记录的内容以及需要搜索的内容。
【解决方案2】:

我没有看到输入字符串应用了正确的转义字符。当您在 javascript 标签中发布问题时,我在下面尝试使用 javascript 并给出所需的结果。

var str = "\"header\": [[{\"key\": \"x-device-auth\",\"value\": \"token\"}]";
  var res = str.replace('token','{{token}}');

【讨论】:

  • 这正是导致我假设的原因,输入字符串不是 js 表示,而是实际的字符串,OP 需要替换其中的内容。