【问题标题】:Escape json in javascript在 javascript 中转义 json
【发布时间】:2018-07-27 11:56:19
【问题描述】:

需要对下面的json进行转义

{
    "xx": 'a',
    "yy": "bb"
}

在javascript中进入如下结构

{\r\n\t\"xx\": 'a',\r\n\t\"yy\": \"bb\"\r\n}

我已尝试此链接中的代码建议,How to escape a JSON string containing newline characters using JavaScript?

var request = {
  "xx": "aaa",
  "yy": "bb"
}
var myJSONString = JSON.stringify(request);
var myEscapedJSONString = myJSONString.replace(/\\n/g, "\\n").replace(/\\'/g, "\\'").replace(/\\"/g, '\\"').replace(/\\&/g, "\\&").replace(/\\r/g, "\\r").replace(/\\t/g, "\\t").replace(/\\b/g, "\\b").replace(/\\f/g, "\\f");

但没用,请帮忙。

代码必须像下面这样转义

  • 退格替换为 \b
  • 换页被替换为 \f
  • 换行符替换为\n
  • 回车替换为 \r
  • 制表符替换为 \t
  • 双引号替换为\"
  • 反斜杠替换为 \

【问题讨论】:

  • 您尝试的代码在哪里?
  • 你能说出你想要这个的原因吗?可能有更好的方法来实现这一点。像这样序列化它,会导致解析时出现问题。
  • 我已经在我的代码中尝试过这个,var myJSONString = JSON.stringify(request); var myEscapedJSONString = myJSONString.replace(/\\n/g, "\\n").replace(/\\'/g, "\\'").replace(/\\"/g, '\\" ').replace(/\\&/g, "\\&").replace(/\\r/g, "\\r").replace(/\\t/g, "\\t") .replace(/\\b/g, "\\b").replace(/\\f/g, "\\f");请求将包含上面给定的 json 结构 { "xx": "aaa", "yy": "bb" }
  • @RajeshKumar 我支持 Dhananjai 所说的话。您的问题可能有更好的解决方案,您为什么要这样做?
  • @Marie - 需要将转义的 json 作为请求发送到 API 服务

标签: javascript json escaping


【解决方案1】:

不知道你为什么要这样做,但 stringify 正是这样做的,没有正则表达式或任何花哨的东西,.. 只是搅拌你的 JSON 字符串。

我也删掉了引号..

var request = {
  "xx": "aaa",
  "yy": "bb"
}
var myJSONString = JSON.stringify(request, null, 2);
var myEscapedJSONString = JSON.stringify(myJSONString).slice(1, -1);

console.log(myEscapedJSONString);

【讨论】:

  • 感谢您的建议,请查看更新后的问题以更好地了解我的要求,我需要将转义的 json 作为请求发送到 API 服务
【解决方案2】:

var a= {
  "xx": "aa",
  "yy": "bb"
}

var nA = JSON.stringify(a, null, "\r\t");
var nB = JSON.stringify(nA);
console.log(nB)

document.getElementById("showData").value = JSON.parse(nB);
<textarea id="showData" rows="10" cols="20"></textarea>

【讨论】:

  • 这不是预期的结果。此外,这段代码会在很多情况下中断,例如{"foo":"{bar}"}.
  • 同样的限制仍然适用。
  • @str,首先,JSON 是有效的,来自 OP 提到的请求。第二件事是:replace 会找到第一个匹配的元素。所以第一个陈述没有问题。其次,替换将始终检查最后一个元素,因为我使用了正则表达式。
  • OP 的输出包含空格,你的没有。
  • @Hardik - 感谢您的代码,请查看我更新的问题,您可以更好地了解我的需求。
猜你喜欢
  • 2011-03-16
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2011-05-21
相关资源
最近更新 更多