我在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似乎仍然无效。
我有以下疑问 -
答案 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
。一个反斜杠用来表示下一个反斜杠,然后再用一个反斜杠来表示引号。
status
和UP
是同一个问题。修复您的服务器:)