多层次的 Javascript JSON 解析和字符串化

标签 javascript json

我有一个 javascript 对象,它包含一个属性,该属性具有另一个 json 字符串化对象的值。我无法将字符串的打印输出版本恢复为对象形式。请参见以下代码。 json字符串的console.log输出内容与jsonFromStr右侧完全一致。但是,JSON.parse(json) 是正常的,而 JSON.parse(jsonFromStr) 是错误的。这里有什么问题?

jsfiddle:http://jsfiddle.net/jma7889/qtmmpj2t/

level2Obj = { key2a: "foo", key2b: 3};
level2ObjJson = JSON.stringify(level2Obj);
level1Obj = {key1a: "bar", key1b: {level2ObjJson}};

json = JSON.stringify(level1Obj);
jsonFromStr = '{"key1a":"bar","key1b":{"level2ObjJson":"{\"key2a\":\"foo\",\"key2b\":3}"}}'; // same than json

objFromStrify = JSON.parse(json); // OK
objFromAssignedString = JSON.parse(jsonFromStr); // Uncaught SyntaxError: Unexpected token l in JSON at position 45

最佳答案

如果你这样做,它将起作用:

jsonFromStr = '{"key1a":"bar","key1b":{"level2ObjJson":"{\\\"key2a\\\":\\\"foo\\\",\\\"key2b\\\":3}"}}';

您的版本不起作用的原因是转义序列 \" 在那一刻被解析,因此 jsonFromStr 的实际值将是:

'{"key1a":"bar","key1b":{"level2ObjJson":"{"key2a":"foo","key2b":3}"}}'

...这是无效的 JSON。

您需要在 JSON 字符串中保持未解析的转义,为此您可以通过使用额外的斜杠转义转义序列本身来实现这一点。

关于多层次的 Javascript JSON 解析和字符串化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36815031/

相关文章:

PHP:动态分配一个空对象给stdClass

ios - 构建基本应用程序 iOS 应用程序 - 单一 View - 最佳实践

javascript - 在mapbox/leaflet上聚类geojson文件

c# - 在 C# 中使用 Javascript 变量

android - 如何访问json中的对象>数组>对象>数组>对象?

ruby-on-rails - 如何遍历 JSON 数组以获取键的值?

javascript - 使用 Codeigniter 加载多个 View 的最佳选项是什么?

javascript - 如何使用 touchmove 来补充 mousemove for androids

javascript - Node JS 路由行为没有意义

javascript - QT QWebEngine 滚动后渲染?