2016-04-23 2 views
1

У меня есть объект javascript, который содержит свойство со значениями другого строкового объекта json. Я не могу получить версию строки для печати в форме объекта. См. Следующий код. console.log выходное содержание json строка точно соответствует правой стороне jsonFromStr. Однако JSON.parse(json) в порядке, а JSON.parse(jsonFromStr) - это ошибка. Что здесь не так?Javascript JSON анализирует и строит для нескольких уровней

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

Если вы сделаете это будет работать:

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

Причина, по которой ваша версия не работает в том, что последовательность выхода \" решается в тот самый момент, и поэтому фактическое значение jsonFromStr будет:

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

... что недействительно JSON.

Вам нужно, чтобы эти escape-последовательности не были разрешены в строке JSON, и это вы делаете, избегая самой escape-последовательности с помощью дополнительных косых черт.

+0

Он работает таким образом, спасибо! –

+0

Добро пожаловать. – trincot

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

У вас есть дополнительные "" для значения level2ObjJson ключа, замените jsonFromStr в коде с вышеприведенным кодом.

Смежные вопросы