2014-07-03 19 views
12

Jak uciec cudzysłowów jeśli ciąg JSON jest taka:JavaScript Ucieczka cudzysłowy

var str = "[{Company: "XYZ",Description: ""TEST""}]" 

Chcę uciec wtórne cudzysłowów w teście wartości.

Próbowałem tego, ale to nie działa.

var escapeStr = str.replace(/""/g,'\"'); 

Czego mi brakuje?

+0

Dlaczego buduje JSON przez siebie raczej niż przy użyciu 'JSON.stringify'? – Barmar

+2

jako sidenote, wyrażenie regularne, którego używałeś, jest nieprawidłowe, powinno być 'str.replace (/"/g, '\ "')' – Kariudo

Odpowiedz

14

Powinno być:

var str='[{"Company": "XYZ","Description": "\\"TEST\\""}]'; 

Po pierwsze, zmieniono zewnętrzne cytaty do pojedynczych cudzysłowach, więc nie będą one sprzeczne z wewnętrznymi cytatów. Następnie umieściłem ukośnik odwrotny przed najgłębszymi cytatami wokół TEST, aby uciec przed nimi. I uciekłem od odwrotnego ukośnika, tak że będzie traktowany dosłownie.

można uzyskać ten sam efekt przy użyciu funkcji JSON:

var str=JSON.stringify({Company: "XYZ", Description: '"TEST"'}); 
+0

Pierwszy przykład jest nadal nieprawidłowy. Klucze obiektów JSON również muszą być podwójnie cytowane. Jednak do tego należy naprawdę użyć 'JSON.stringify'. –

+1

Dzięki, nie zauważyłem, że zostawił te cytaty. – Barmar

+0

Zapomniałem podwójnie zacytować obiekt JSON w moim przykładzie. Spróbuję JSON.stringify. Dzięki. – MDuB

0

Tutaj wewnętrzna wycena uciekła, a cały ciąg wzięty w pojedynczym cytacie.

var str = '[{ "Company": "XYZ", "Description": "\\"TEST\\""}]'; 
+1

''\"' === '' '', musisz ucieknij od tyłu w ukośnych liniach .. –

+0

Tak, masz rację, zaktualizowałem post. – byJeevan

+1

btw Klucze obiektów JSON muszą być również podwójnie cytowane. –