我有JSON响应,它有反斜杠,有些响应不包含反斜杠。
我需要根据响应显示错误消息,如何使用javascript解析JSON响应?
有反斜杠的JSON反应,
{"_body":{"isTrusted":true},"status":0,"ok":false,"statusText":"","headers":{},"type":3,"url":null} 用反斜杠来回应,
{"_body":"{\"timestamp\":\"2016-11-18T04:46:18.972+0000\",\"status\":500,\"error\":\"Internal Server Error\",\"exception\":\"java.lang.ArrayIndexOutOfBoundsException\",\"message\":\"1\",\"path\":\"/login\"}","status":500,"ok":false,"statusText":"Internal Server Error"}我尝试了以下方法,但它只适用于没有反斜杠的JSON响应。
var strj = JSON.stringify(err._body);
var errorobjs = strj.replace(/\\/g, "");发布于 2016-11-18 05:13:45
实际上,问题不在于/斜杠。JSON is INVALID。
从后端服务器中删除这些"
{"_body":"{\"timestamp\":\"2016-11-18T04:46:18.972+0000\",\“状态\”:500,\“错误\”:\“内部服务器错误\”,\"exception\":\"java.lang.ArrayIndexOutOfBoundsException\",\“消息\”:\“1\”,\"path\":\"/login\"}",“状态”:500,“确定”:false,“statusText”:“内部服务器错误”}
"{"timestamp之前的double quote和登录“}”之后的一个突出显示了这两个选项,您的代码就可以工作了。
var data = '{"_body":{\"timestamp\":\"2016-11-18T04:46:18.972+0000\",\"status\":500,\"error\":\"Internal Server Error\",\"exception\":\"java.lang.ArrayIndexOutOfBoundsException\",\"message\":\"1\",\"path\":\"/login\"},"status":500,"ok":false,"statusText":"Internal Server Error"}';
var json_data = JSON.parse(data);
console.log(json_data);
您实际上是将body对象包装在后端的字符串中,这是无效的。
"body" : "bodyOBJ" //Invalid
"body" : bodyObj //Valid发布于 2016-11-18 05:12:11
var obj = JSON.parse(response)
if(typeof obj._body == "string") {
obj._body = JSON.parse(obj._body)
}
console.log(obj);发布于 2016-11-18 05:32:34
解决方案:
var response = {"_body":"{\"timestamp\":\"2016-11-18T04:46:18.972+0000\",\"status\":500,\"error\":\"Internal Server Error\",\"exception\":\"java.lang.ArrayIndexOutOfBoundsException\",\"message\":\"1\",\"path\":\"/login\"}","status":500,"ok":false,"statusText":"Internal Server Error"};
var body = JSON.parse(response._body);
console.log(body.error);解释:
您有一个带有一个键的顶级对象,_body。该键的值是一个包含JSON本身的字符串。这通常是因为服务器端代码没有正确创建JSON。这就是为什么在字符串中看到\"的原因。除非您能够修复服务器端代码,否则必须手动解码嵌套的JSON。
https://stackoverflow.com/questions/40669673
复制相似问题