He generado algunos JSON y estoy tratando de ponerlo en un objeto en JavaScript. Sigo recibiendo errores. Esto es lo que tengo:
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = eval('('+data+')');
Esto me da un error:
unterminated string literal
Con JSON.parse(data)
, veo mensajes de error similares: " Unexpected token ↵
" en Chrome y " unterminated string literal
" en Firefox e IE.
Cuando saco el \n
después, sometext
el error desaparece en ambos casos. Parece que no puedo entender por qué las \n
marcas eval
y JSON.parse
fallan.
javascript
json
newline
oso polar
fuente
fuente
Respuestas:
Supongo que esto es lo que quieres:
(Debe escapar de la "\" en su cadena (convirtiéndola en un doble - "\"), de lo contrario se convertirá en una nueva línea en la fuente JSON, no en los datos JSON).
fuente
Usted tendrá que tener una función que sustituye
\n
a\\n
en caso de quedata
no es un literal de cadena.El resultado
dataObj
seráfuente
.replace("\\n", "\\\\n")
) y también sugeriría usar regex para permitir el reemplazo de varias instancias (es decir.replace(/\n/g, "\\\\n")
).replace("\n", "\\n")
debería hacer el trabajo bien !! Por ejemplo,var test = [{"description":"Some description about the product. This can be multi-line text."}]; console.log(JSON.parse(test.replace(/\n/g, "\\n")));
el objeto saldrá perfectamente bien a la consola del navegador como[{"description":"Some description about the product.\nThis can be multi-line text."}]
\n
en el valor.eval
función. 17 votos a favor ???De acuerdo con la especificación, http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf :
Por lo tanto, no puede pasar
0x0A
o0x0C
codificar directamente. Está prohibido! La especificación sugiere utilizar secuencias de escape para algunos códigos bien definidos deU+0000
aU+001F
:\f
representa el carácter del feed del formulario (U+000C
).\n
representa el carácter de avance de línea (U+000A
).Como la mayoría de los lenguajes de programación usan
\
para las citas, debe escapar de la sintaxis de escape (doble escape: una vez para el lenguaje / plataforma, una vez para el propio JSON):fuente
Podría simplemente escapar de su cadena en el servidor al escribir el valor del campo JSON y no escapar cuando recupere el valor en el navegador del cliente, por ejemplo.
La implementación de JavaScript de todos los principales navegadores tiene el comando unescape.
Ejemplo:
En el servidor:
En el navegador:
fuente
Es posible que desee examinar esta función de C # para escapar de la cadena:
http://www.aspcode.net/C-encode-a-string-for-JSON-JavaScript.aspx
fuente
>
?Utilicé esta función para eliminar la nueva línea u otros caracteres en los datos para analizar los datos JSON:
fuente
JSON.stringify
convertiría la cadena anterior a
como se menciona aquí
json stringify
fuente
Encontré ese problema al hacer una clase en PHP 4 para emular json_encode (disponible en PHP 5). Esto es lo que se me ocurrió:
Seguí las reglas mencionadas aquí . Solo usé lo que necesitaba, pero creo que puedes adaptarlo a tus necesidades en el idioma que estás utilizando. El problema en mi caso no era sobre las nuevas líneas como pensaba originalmente, sino sobre el / no escapar. Espero que esto evite que alguien más tenga el pequeño dolor de cabeza que tuve al descubrir lo que hice mal.
fuente
Como le he entendido la pregunta, no se trata de analizar JSON porque se puede copiar y pegar el JSON en su código directamente - por lo que si este es el caso, entonces sólo tienes que copiar el JSON de particular a
dataObj
variable sin envolviéndolo con comillas simples (consejo:eval==evil
)fuente