服务器向我返回一个JSON字符串,如下所示:
{"payload":{"data":"{\"notification_type\":\"{\"type1\":\"{\"type2\":\"type2 value\"}\"}\"}"}}
据我了解,无法使用JSON.parse()API解析此字符串,因为应正确转义字符串中嵌套的JSON字符串。如果字符串未正确转义,则会出现以下错误:
Uncaught SyntaxError: Unexpected token n in JSON at position 22
因此,应遵循以下嵌套性质对字符串进行正确的转义,以便JSON.parse()可以对其进行处理:
var properString = "{\"payload\":{\"data\":\"{\\\"notification_type\\\":\\\"{\\\\\\\"InternalKey\\\\\\\":\\\\\\\"InternalValue\\\\\\\"}\\\"}\"}}";
console.log("Proper String = ");
console.log(properString);
var firstLevelObject = JSON.parse(properString);
console.log("First Level Object = ");
console.log(firstLevelObject);
var secondLevelObject = JSON.parse (firstLevelObject.payload.data);
console.log("Second Level Object = ");
console.log(secondLevelObject);
var thirdLevelObject = JSON.parse(secondLevelObject.notification_type);
console.log("Third Level Object = ");
console.log(thirdLevelObject);
这是谷歌浏览器控制台输出相同内容的方式:
但是,我无法将服务器中的不正确字符串转换为变量
properString
中定义的正确转义的字符串,因此无法正确构造可遍历的JSON。如何用适当的转义字符转换字符串?参考资料:
我已参考this答案以了解应如何添加嵌套的转义字符,但答案并未说明如何完成转换。
最佳答案
实际上,您得到的JSON字符串并不完全正确。嵌套JSON字符串中的JSON语法不正确。但是您可以通过正则表达式或本机JS将其重建为正确的JSON语法字符串。
var obj = '{"payload":{"data":"{\"notification_type\":\"{\"type1\":\"{\"type2\":\"type2 value\"}\"}\"}"}}';
var payloadString = obj.substring(0, 20).concat('"}}');
obj = obj.substring(20, obj.length - 3).replace("\"{", "{").replace("}\"}", "}}").replace("}\"}", "}}").replace("\"{", "{");
var data = JSON.parse(obj);
var obj2 = JSON.parse(payloadString);
//console.log(payload);
//console.log(data);
obj2.payload.data = data;
console.log(obj2);