¿Cómo escapar de los caracteres especiales al construir una cadena JSON?

Esta es mi cadena

{
    'user': {
        'name': 'abc',
        'fx': {
            'message': {
                'color': 'red'
            },
            'user': {
                'color': 'blue'
            }
        }
    },
    'timestamp': '2013-10-04T08: 10: 41+0100',
    'message': 'I'mABC..',
    'nanotime': '19993363098581330'
}    

Aquí el mensaje contiene comillas simples, que es lo mismo que las comillas utilizadas en JSON. Lo que hago es llenar una cadena de entradas de usuario como el mensaje. Por lo tanto, tengo que escapar de ese tipo de escenarios especiales que rompe el código. Pero aparte de reemplazar la cadena, ¿hay alguna manera de hacer que se escapen pero que todavía permita que el HTML los procese de vuelta al mensaje correcto?

Solución

Una cadena JSON debe estar entre comillas dobles, según las especificaciones, por lo que no es necesario escapar '.
Si tiene que usar un carácter especial en su cadena JSON, puede escaparlo usando el carácter ``.

Vea esta lista de caracteres especiales utilizados en JSON :

\b  Backspace (ascii code 08)
\f  Form feed (ascii code 0C)
\n  New line
\r  Carriage return
\t  Tab
\"  Double quote
\\  Backslash character


Sin embargo, aunque sea totalmente contraria a la especificación, el autor podría utilizar ....

Esto es malo porque :

  • Es contrario a las especificaciones
  • Ya no es una cadena JSON válida
Pero funciona, como quieras o no.

Para los nuevos lectores, utiliza siempre las comillas dobles para tus cadenas json.

Comentarios (18)

Todo el mundo habla de cómo escapar de ' en un literal de cadena '-quoted. Hay un problema mucho mayor aquí: **Los literales de cadena entre comillas no son válidos en JSON. JSON se basa en JavaScript, pero no es lo mismo. Si está escribiendo un literal de objeto dentro del código JavaScript, está bien; si realmente necesita JSON, necesita usar ".

Con cadenas entre comillas dobles, no necesitará escapar el '. (Y si quisiera un literal " en la cadena, usaría &").

Comentarios (2)

en relación con el post de AlexB&#39:

 \'  Apostrophe or single quote
 \"  Double quote

el escape de comillas simples sólo es válido en cadenas json de comillas simples el escape de comillas dobles sólo es válido en cadenas json con comillas dobles

ejemplo:

'Bart\'s car'       -> valid
'Bart says \"Hi\"'  -> invalid
Comentarios (2)