Javascript JSON解析和stringify为多个级别

时间:2016-04-23 18:52:03

标签: javascript json

我有一个javascript对象,其中包含一个属性,其中包含另一个json字符串化对象的值。我无法将字符串的打印输出版本恢复为对象形式。请参阅以下代码。 console.log字符串的json输出内容与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

2 个答案:

答案 0 :(得分:2)

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

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

您的版本不起作用的原因是转义序列\"已在此时解决,因此jsonFromStr的实际值将为:

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

...这是无效的JSON。

您需要在JSON字符串中保留未解析的转义,这可以通过使用其他斜杠转义转义序列本身来实现。

答案 1 :(得分:0)

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

对于 level2ObjJson 键的值,您有一个额外的“”,用上面的代码替换代码中的 jsonFromStr