服务器返回给我一个像这样的 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);
关于javascript - 构造嵌套转义 JSON 字符串以进行 JSON.parse() 递归检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58396322/