parse mostrar ejemplos ejemplo datos create crear array json

mostrar - json.stringify array



¿Cómo escapar personajes especiales en la construcción de una cadena JSON? (9)

Aquí está 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 igual a la cita utilizada en JSON. Lo que hago es llenar una cadena de las entradas del usuario, como el mensaje. Entonces, necesito escapar de ese tipo de escenarios especiales que rompen el código. Pero aparte de la sustitución de cadenas, ¿hay alguna forma de hacerlas escapar pero aún así permitir que HTML las procese nuevamente al mensaje correcto?


Creo que todos estamos de acuerdo en que los jsons de una sola cita no son verdaderos JSON. Sea como fuere, aún necesitamos abordar la cuestión de escapar "dentro de una cadena json citada dos veces, en ausencia de bibliotecas que lo hagan por nosotros.

Reemplazar cada "con un" NO ES SUFICIENTE: el usuario puede ingresar la entrada: / y el análisis, de nuevo, falla (piense por qué).

En su lugar, primero reemplace cada / con / (barra diagonal inversa doble). Solo entonces, reemplace cada "con /" (barra invertida seguida de ").


Este es un problema si incluye sus datos en un archivo html de la siguiente manera (usando el motor de plantillas ejs):

<script> var MY_APP = { data: JSON.parse(''<%-JSON.stringify(data)%>''}; </script>

si los datos contienen una cadena con comillas simples, se generará un error, a menos que convierta '' a /' que solo es posible con la cadena "///'"

<script>var BRANCHE = { data: JSON.parse(''<%- JSON.stringify(data).replace("''","///'")%>'')}; </script>

No es bonito, pero funciona.


Estoy consternado por la presencia de desinformación muy elevada sobre una pregunta tan vista sobre un tema básico.

Las cadenas JSON no pueden ser citadas con comillas simples . Las diversas versiones de la especificación ( el original de Douglas Crockford, la versión ECMA y la versión IETF ) indican que las cadenas deben citarse con comillas dobles. Este no es un tema teórico, ni una cuestión de opinión, como sugiere actualmente la respuesta aceptada; cualquier analizador JSON en el mundo real dará error si intenta hacer que analice una cadena entre comillas simples.

La versión de Crockford y ECMA incluso muestra la definición de una cadena utilizando una imagen bonita, lo que debería aclarar el punto de manera inequívoca:

La bonita imagen también enumera todas las secuencias de escape legítimas dentro de una cadena JSON:

  • /"
  • //
  • //
  • /b
  • /f
  • /n
  • /r
  • /t
  • /u seguido de cuatro dígitos hexadecimales

Tenga en cuenta que, contrariamente a las tonterías en algunas otras respuestas aquí, /' nunca es una secuencia de escape válida en una cadena JSON. No es necesario que lo sea, porque las cadenas JSON siempre tienen comillas dobles.

Finalmente, normalmente no debería pensar en escaparse de los caracteres usted mismo al generar programáticamente JSON (aunque, por supuesto, cuando edite manualmente, por ejemplo, un archivo de configuración basado en JSON). En su lugar, forme la estructura de datos que desea codificar utilizando cualquier tipo de mapa nativo, matriz, cadena, número, booleano y nulo que tenga su idioma, y ​​luego codifíquelo en JSON con una función de codificación JSON. Dicha función probablemente esté integrada en el lenguaje que esté utilizando, como JSON.stringify de JavaScript, JSON.stringify PHP o json_encode Python. Si está utilizando un lenguaje que no tiene dicha funcionalidad incorporada, probablemente pueda encontrar una biblioteca de codificación y análisis JSON para usar. Si simplemente usa funciones de lenguaje o biblioteca para convertir cosas a y desde JSON, ni siquiera necesitará conocer las reglas de escape de JSON. Esto es lo que el preguntador equivocado aquí debería haber hecho.


La mayoría de estas respuestas tampoco responde la pregunta o es innecesariamente larga en la explicación.

OK, entonces JSON solo usa comillas dobles, ¡lo conseguimos!

Estaba intentando usar JQuery AJAX para publicar datos JSON en el servidor y luego devolver esa misma información. La mejor solución para la pregunta publicada que encontré fue usar:

var d = { name: ''whatever'', address: ''whatever'', DOB: ''01/01/2001'' } $.ajax({ type: "POST", url: ''some/url'', dataType: ''json'', data: JSON.stringify(d), ... }

Esto escapará de los personajes para ti.

Esto también fue sugerido por Mark Amery, Gran respuesta BTW

Espero que esto ayude a alguien.



Puede ser que sea demasiado tarde para la fiesta pero esto analizará / escapará una sola cita (no quiero entrar en una batalla en parse vs escape) ..

JSON.parse("/"''/"")


Todo el mundo está hablando de cómo escapar '' en una '' literal de cadena citada. Aquí hay un problema mucho más grande: los literales de cadenas entre comillas no son JSON válidos . JSON está basado en JavaScript, pero no es lo mismo. Si está escribiendo un objeto literal dentro del código JavaScript, está bien; si realmente necesita JSON, necesita usar " .

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


Una cadena JSON debe tener una comilla doble, de acuerdo con las especificaciones , por lo que no es necesario que escapes '' .
Si tiene que usar caracteres especiales en su cadena JSON, puede escapar utilizando / character.

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, incluso si es totalmente contrario a la especificación, el autor podría usar /' .

Esto es malo porque:

  • ES CONTRARIO A LAS ESPECIFICACIONES
  • Ya no es cadena JSON válida

Pero funciona, como tú quieras o no.

Para los lectores nuevos, siempre use comillas dobles para sus cadenas json.


con respecto a la publicación de AlexB:

/' Apostrophe or single quote /" Double quote

las comillas simples de escape solo son válidas en cadenas JSON de una sola cita
las comillas dobles de escape solo son válidas en cadenas de json dobles

ejemplo:

''Bart/'s car'' -> valid ''Bart says /"Hi/"'' -> invalid