2010-04-28 30 views
40

Recibo una respuesta JSON en una solicitud de Ajax del servidor. De esta manera funciona:¿Cómo puedo poner comillas dobles dentro de una cadena dentro de una respuesta JSON ajax de php?

{ "a": "1", "b": "hola 'gatito'"}

Pero no tuve éxito en poner comillas dobles gatito.

Cuando convierto "a \ x22 en la respuesta de Ajax, todavía se interpreta como" por JavaScript y no puedo analizar el JSON.

¿Debo también escapar el \ y deshacerme del paisaje más tarde (lo cual sería posible)?

¿Cómo hacer esto?

Editar: No estoy seguro de si me lo expresó bien: Quiero que esta cadena dentro de la "b" después el análisis sintáctico:

hola "gatito"

Si es necesario también pude agrega un paso adicional después del análisis para convertir "b", pero supongo que no es necesario, ¿hay una manera más elegante para que esto suceda automáticamente?

Edit2: La página de ajax es generada por php. He intentado varias cosas ahora para crear el valor de b, todo el resultado en error de análisis JSON en la página:

$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: Esta solución finalmente funciona:

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

'\" 'está bien y' \ u0022' está bien, pero '\ x22', aunque es válido en un literal de cadena de JavaScript, no está permitido en JSON. – bobince

Respuesta

56

Sólo escapar de ella con una barra invertida:

> 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 

analizadores JSON reconocen \" dentro de cadenas entre comillas dobles como una doble cita. Tenga en cuenta que en el segundo ejemplo, la doble barra diagonal inversa es necesaria porque hay un pase del analizador de Javascript, y luego otro pase del analizador JSON.

+0

¡muchas gracias! Me salvó el día. ahora funciona para mí: $ b = str_replace ('"', '\\"', $ b); - karlthorwald - aka – user89021

+0

@ user89021: por favor, lea también acerca de cómo escapar de las barras invertidas. – bobince

+0

Usted salvó mi semana. múltiples analizadores resulta que tuve que agregar tres barras. ¡Finalmente funciona! –

2

use solo json_encode (cualquier elemento de PHP), se analizará automáticamente.

+0

sí, pero mi versión de php es antigua, ubuntu hardy aún no la tiene, solo PHP 5.2.4-2ubuntu5.10 aquí - karthorwald - aka – user89021

+0

volveré a verificar, porque 5.2 debería tenerla. la última vez que no estaba allí: o – user89021

0

Un poco fuera de tema, se puede usar JavaScript/NodeJS en su servidor y utilizar literales plantilla ES6 (los acentos abiertos `` se utilizan en todo "cristiano"), pero 7 años más tarde que probablemente ya utilizar NodeJS :)

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