从节点返回的json中的斜杠

时间:2016-09-22 08:32:58

标签: javascript angularjs json

我在Node服务器返回的json中收到斜杠。这给解析json带来了挑战。

json看起来像

"{\"responseCode\":200,\"headers\":{\"Access-Control-Allow-Origin\":\"*\",\"Content-Type\":\"application/json; charset=utf-8\",\"X-Powered-By\":\"Express\",\"Connection\":\"keep-alive\",\"Date\":\"Thu, 22 Sep 2016 08:12:39 GMT\",\"Content-Length\":\"21\",\"Etag\":\"W/\\"15-HeifZ4bmt+WxpIWDoartGQ\\"\"},\"response\":\"{\\"status\\":\\"UP\\"}\",\"bytesSent\":715779}"

为了摆脱斜线,我做了一个替换,然后使用JSON.parse将其转换回json

.then(function (result) {
     var status = "";
     var str = JSON.stringify(result); 
     console.log("str result  ", str);
     str = str.replace(/\\/g, "");
     console.log("result after cleanup  ", str);
     var obj = JSON.parse(str);
     status = obj.response.status;
}

更换斜杠后,字符串看起来像这样

"{\"responseCode\":200,\"headers\":{\"Access-Control-Allow-Origin\":\"*\",\"Content-Type\":\"application/json; charset=utf-8\",\"X-Powered-By\":\"Express\",\"Connection\":\"keep-alive\",\"Date\":\"Thu, 22 Sep 2016 08:12:39 GMT\",\"Content-Length\":\"21\",\"Etag\":\"W/\"15-HeifZ4bmt+WxpIWDoartGQ\"\"},\"response\":\"{\"status\":\"UPLOADED\"}\",\"bytesSent\":715779}"

当我尝试将其解析为JSON对象时,它会在

上抛出错误
var obj = JSON.parse(str);

由于仍然存在斜杠,JSON似乎仍然无效。

我有以下疑问 -

  1. 如何更新我的正则表达式以消除这些斜杠
  2. 为什么在响应中引入了这些斜杠

3 个答案:

答案 0 :(得分:6)

JSON.stringify()是用于生成 JSON字符串的方法。如果您将它应用于已经是JSON字符串的内容,那么您将获得双重编码的JSON字符串:

var alreadyJson = '{"foo": "bar"}';
var doubleEncoded = JSON.stringify(alreadyJson);
console.log(doubleEncoded , typeof doubleEncoded);
"{\"foo\": \"bar\"}" string

您需要使用的是JSON.parse()方法:

var alreadyJson = '{"foo": "bar"}';
var decoded = JSON.parse(alreadyJson);
console.log(decode, typeof decoded);
{ foo: 'bar' } 'object'

答案 1 :(得分:3)

你不需要regx来消除斜线。

var response = '{\"responseCode\":200,\"headers\":{\"Access-Control-Allow-Origin\":\"*\",\"Content-Type\":\"application/json; charset=utf-8\",\"X-Powered-By\":\"Express\",\"Connection\":\"keep-alive\",\"Date\":\"Thu, 22 Sep 2016 08:12:39 GMT\",\"Content-Length\":\"21\",\"Etag\":\"W/\\"15-HeifZ4bmt+WxpIWDoartGQ\\"\"},\"response\":\"{\\"status\\":\\"UP\\"}\",\"bytesSent\":715779}';
JSON.parse(response);

这将为您提供消除斜杠的JSON对象。 Reference

答案 2 :(得分:0)

如果我在字符串中添加了一些换行符,它看起来像这样:

"{
  \"responseCode\":200,
  \"headers\":{
    \"Access-Control-Allow-Origin\":\"*\",
    \"Content-Type\":\"application/json; charset=utf-8\",
    \"X-Powered-By\":\"Express\",
    \"Connection\":\"keep-alive\",
    \"Date\":\"Thu, 22 Sep 2016 08:12:39 GMT\",
    \"Content-Length\":\"21\",
    \"Etag\":\"W/\\"15-HeifZ4bmt+WxpIWDoartGQ\\"\"
  },
  \"response\":\"{\\"status\\":\\"UP\\"}\",
  \"bytesSent\":715779
}"

我们可以看到其中一个问题出现在Etag行。部分\\"15应为\\\"15。一个反斜杠用来表示下一个反斜杠,然后再用一个反斜杠来表示引号。

statusUP是同一个问题。修复您的服务器:)