javascript - 构造嵌套转义 JSON 字符串以进行 JSON.parse() 递归检索

标签 javascript jquery json parsing recursion

服务器返回给我一个像这样的 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);

谷歌浏览器的控制台输出是这样的: enter image description here

但是,我无法将来自服务器的不正确字符串转换为变量 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/

相关文章:

javascript - 如何将 ng-model 值捕获到可排序选项中 [ui-sortable]

javascript - 如何获取父类最接近的表单元素。 jQuery

javascript - 从 jquery 数据表中获取特定的行数据

javascript - 有没有办法缩小我的菜单按钮的回调?

javascript - 在Sigma.js中加载JSON文件但无法绑定(bind)overEdge事件

java - mapper.writeValue() 方法出错

javascript - 如何使用 angular.js 实时检查输入字段是否与另一个变量匹配

javascript - 不刷新页面获取单选值

javascript - Bootstrap 轮播 : carousel-indicators not changing size/class

javascript - 如何根据页面大小拆分json字符串?