2010-04-28 13 views
40

Otrzymuję odpowiedź JSON w żądaniu Ajax z serwera. W ten sposób to działa:Jak umieścić podwójne cudzysłowy w ciągu znaków w odpowiedzi ajax JSON z php?

{ "a": "1", "b": "cześć 'kotek'"}

Ale nie udało się wprowadzenie cudzysłowie kotek.

Kiedy konwertować „do \ x22 w odpowiedzi Ajax, to wciąż interpretowane jako” przez JavaScript i nie można analizować JSON.

Mam też uciec \ i unescape później (co byłoby możliwe)?

Jak to zrobić?

Edit: Nie jestem pewien, czy to wyraził również: Chcę ten ciąg wewnątrz „b” po parse:

hello „kotek”

razie potrzeby mogłem również dodaj dodatkowy krok po analizie, aby przekonwertować "b", ale myślę, że nie jest to konieczne, istnieje bardziej elegancki sposób, więc dzieje się to automatycznie?

Edycja2: Strona ajax jest generowana przez php. Próbowałem kilka rzeczy teraz, aby utworzyć wartość B, cały wynik w błąd parsowania JSON na stronie:

$b = 'hello "kitty"';  

    // no 1: 
    //$b = str_replace('"',"\x22",$b); 

    // or no 2: 
    // $b = addslashes($b); 

    // or no 3: 
    $b = str_replace('"','\"',$b); 

    echo '{ "a" : "1", "b" : "' . $b . '"}'; 

Edit3: Rozwiązanie to w końcu działa:

$b = 'hello "kitty"';  
$b = str_replace('"','\\"',$b); 
echo '{ "a" : "1", "b" : "' . $b . '"}'; 
+3

'\" 'jest w porządku, a' \ u0022' jest w porządku, ale '\ x22', chociaż jest poprawne w dosłownym łańcuchu JavaScript, jest niedozwolone w JSON – bobince

Odpowiedz

56

Wystarczy uciec z backslash:

> JSON.stringify({"a": 5, "b": 'a "kitty" mighty odd'}) 
{"a":5,"b":"a \"kitty\" mighty odd"} 
> JSON.parse('{"a":5,"b":"a \\"kitty\\" mighty odd"}') 
Object 
    a: 5 
    b: a "kitty" mighty odd 
    __proto__: Object 

parser JSON rozpoznać \" wewnątrz podwójnych cudzysłowów jako podwójny cudzysłów. Zauważ, że w drugim przykładzie podwójny ukośnik odwrotny jest potrzebny, ponieważ istnieje przepustka analizatora JavaScript, a następnie kolejny parser JSON.

+0

dziękuję bardzo, oszczędzasz mój dzień. pracuje dla mnie teraz: $ b = str_replace (' "', '\\"', $ b); - karlthorwald - aka – user89021

+0

@ user89021: proszę przeczytać trochę o ucieczce backslashy zbyt – bobince

+0

Uratowałeś mój tydzień ze względu na.. wiele parserów okazało się, że musiałem dodać trzy kreski, w końcu działa! –

2

zastosowanie tylko json_encode (każdy element PHP), automatycznie analizuje.

+0

tak, ale moja wersja php jest stara, ubuntu hardy jeszcze jej nie ma, tylko PHP 5.2.4-2ubuntu5.10 tutaj - karthorwald - aka – user89021

+0

Sprawdzę ponownie, ponieważ 5.2 powinno go mieć. Ostatni raz go tam nie było: o – user89021

0

trochę off-topic, można użyć JavaScript/NodeJS na serwerze i korzystać ES6 literały szablonów (The odwrócone, pojedyncze apostrofy `` używane wokół "chrześcijanina"), ale 7 lat później prawdopodobnie już używać NodeJS :)

var myJSON = { 
    "name": { 
     "first": `"Christian"`, 
     "last": "Broberg" 
    }, 
    "age": 49, 
    "skills": [ "JavaScript", "React", "NodeJS" ], 
    "married": false, 
    "superpowers": null 
} 
Powiązane problemy