JSON.stringify сбрасывает двойные кавычки каждый раз, когда strified
Я сохраняю объекты JSON, удаленные из веб-службы, в объекты в javascript. Во многих местах это становится строковым (этот obj проходит через некоторые плагины, он зашифровывает и сохраняет его, и возвращает его), и он добавляет несколько слэшей. Как я могу избежать этого?
http://jsfiddle.net/MJDYv/2/
var obj = {"a":"b", "c":["1", "2", "3"]};
var s = "";
console.log(obj);
s = JSON.stringify(obj);
alert(s); // Proper String
s = JSON.stringify(s);
alert(s); // Extra slash added, Quotes are escaped
s = JSON.stringify(s);
alert(s); // Again quotes escaped or slash escaped but one more slash gets added
var obj2 = JSON.parse(s);
console.log(obj2); // Still a String with one less slash, not a JSON object !
Поэтому при разборе этой множественной строки я снова получаю строку. И когда он пытался получить доступ, как к объекту, он сработает.
Я попытался удалить косую черту, используя replace(/\\/g,"")
, но в конце концов: ""{"a":"b","c":["1","2","3"]}""
Ответы
Ответ 1
Чего вы ожидали?
JSON.stringify
не действует как функция "identity" при вызове данных, которые уже были преобразованы в JSON. По дизайну он избежит кавычек, обратных косых черт и т.д.
Вам нужно позвонить JSON.parse()
ровно столько раз, сколько вы вызвали JSON.stringify()
, чтобы вернуть тот же объект, который вы ввели.
Ответ 2
Вы можете избежать этого, просто позвонив JSON.stringify()
ровно один раз на данные, которые вы хотите включить в JSON.