2013-05-12 12 views
15

Przechowuję obiekty JSON retreived z usługi internetowej do obiektów w javascript. W wielu miejscach jest to uszeregowane (ten obiekt przechodzi przez niektóre wtyczki, które przechwytuje i przechowuje je i przechowuje je) i dodaje wiele ukośników. Jak mogę tego uniknąć?JSON.stringify ucieka podwójne cytaty za każdym razem, gdy stringified

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 ! 

więc podczas analizowania tego wielokrotnego ciąg I skończyć z ciągiem ponownie. A gdy próbuje uzyskać dostęp do obiektu, ulega awarii.

próbowałem usunąć ukośnik za pomocą replace(/\\/g,"") ale kończę z tym: ""{"a":"b","c":["1","2","3"]}""

Odpowiedz

20

Czego spodziewać się stało?

JSON.stringify nie działa jak funkcja "tożsamości" podczas wywoływania danych, które zostały już przekonwertowane na JSON. Zgodnie z projektem, będzie to ucieczka cudzysłowy, ukośniki, itp

Trzeba zadzwonić JSON.parse() dokładnie tyle razy, jak nazywa JSON.stringify() wrócić ten sam obiekt można umieścić w.

+0

Tak, robię to samo teraz, wywołując go dwa razy. Ale w niektórych miejscach zadzwonił 3 lub 4 razy. – user88975

+2

Dzięki stary. Zrobiłeś mój dzień. –

5

Można tego uniknąć po prostu dzwoniąc pod numer JSON.stringify() na dane, które chcesz zmienić w JSON.

+0

Tak, ale oryginalny ciąg przechodzi przez serię wywołań funkcji (w niektórych wtyczkach) i wreszcie po jego zwróceniu nie jestem pewien, ile razy został usztywniony. – user88975

+4

nigdy nie należy go łączyć, dopóki nie będzie trzeba. do tego czasu wystarczy dodać dane do obiektu wynikowego javascript. –

Powiązane problemy