2010-06-18 16 views
10

mam to:JSON.parse ciąg cytatami

JSON.parse('{"130.00000001":{"p_cod":"130.00000001","value":"130.00000001 HDD Upgrade to 2x 250GB HDD 2.5\" SATA2 7200rpm"}}'); 

JSONLint mówi, że jest całkowicie poprawny json. Ale w trakcie wykonywania mam błąd JSON.parse.

Ale, jeśli mogę zmienić swój kod do:

JSON.parse('{"130.00000001":{"p_cod":"130.00000001","value":"130.00000001 HDD Upgrade to 2x 250GB HDD 2.5\\" SATA2 7200rpm"}}'); 

(uwaga podwójnego backslash)

to działa, ale teraz JSONLint mówi invalid json.

Czy ktoś może pomóc w zrozumieniu tego zachowania?

+2

Wydaje mi się to proste. Jsonlint jest zepsuty;) – Wolph

+0

Skąd pochodzi ten łańcuch wejściowy? jest generowany przez koder JSON? – paullb

+0

@paullb nie pochodzi ze zmiennej PHP $ _POST. – mjsilva

Odpowiedz

15

To różnica między formatem drutu, a tym, co trzeba wpisać w swoim kodzie, aby uzyskać format drutu. Kiedy deklarujesz to w kodzie, potrzebujesz podwójnego \ \ w literale, więc ciąg otrzymuje pojedynczy ukośnik odwrotny (w przeciwnym razie zinterpretuje \ "jako sekwencję ucieczkową dla właśnie deklarowania" i wstawi to w twoim ciągu). Jeśli wydrukujesz wartość literału, zobaczysz pojedynczy ukośnik odwrotny.

+0

Tks Dean, myślę, że najpierw muszę uciec javascript, a następnie JSON. Zakładając, że to pochodzi z PHP, jak mogę "podwoić" ucieczkę: próbowałem tego: str_replace ('\ "', '\\"', $ json), ale to nie działa. – mjsilva

+9

Rozumiem: str_replace ('\\' ',' \\\\\ '', $ json) Dziś dowiaduję się, że istnieje również uciekające piekło :) – mjsilva

Powiązane problemy