Estoy escribiendo algunos archivos de datos en formato JSON y me gustaría tener algunos valores de cadena realmente largos divididos en varias líneas. Usando el módulo JSON de python obtengo un montón de errores, tanto si utilizo \N
como si uso \N
como escape.
¿Es posible tener cadenas de varias líneas en JSON? Es más que nada por comodidad visual, así que supongo que puedo activar el ajuste de palabras en mi editor, pero tengo un poco de curiosidad...
JSON no permite saltos de línea reales. Es necesario sustituir todos los saltos de línea por \n
.
Ej:
"primera línea segunda línea"
puede guardarse con:
"primera línea\nsegunda línea"
Nota:
para Python
, esto debe escribirse como:
`"primera línea&"segunda línea&".
donde \\N
es para escapar la barra invertida, de lo contrario python tratará \n
como
el carácter de control "nueva línea"";
He tenido que hacer esto para un pequeño proyecto de Node.js y he encontrado esta solución:
{
"modify_head": [
"<script type='text/javascript'>",
"<!--",
" function drawSomeText(id) {",
" var pjs = Processing.getInstanceById(id);",
" var text = document.getElementById('inputtext').value;",
" pjs.drawText(text);}",
"-->",
"</script>"
],
"modify_body": [
"<input type='text' id='inputtext'></input>",
"<button onclick=drawSomeText('ExampleCanvas')></button>"
],
}
Esto me parece bastante limpio, aparte de que tengo que usar comillas dobles en todas partes. Aunque de otra manera, podría, tal vez, usar YAML, pero eso tiene otras trampas y no está soportado nativamente. Una vez parseado, simplemente uso myData.modify_head.join('\n')
o myData.modify_head.join()
, dependiendo de si quiero un salto de línea después de cada cadena o no.
Esta es una pregunta muy antigua, pero me encontré con esto en una búsqueda y creo que sé el origen de tu problema.
JSON no permite "verdaderas" nuevas líneas en sus datos; sólo puede tener líneas nuevas escapadas. Véase la respuesta de @YOU. De acuerdo con la pregunta, parece que has intentado escapar de los saltos de línea en Python de dos maneras: utilizando el carácter de continuación de línea ("|quot;
) o utilizando `"|quot;como escape.
¡Pero tenga en cuenta: si está usando una cadena en python, los caracteres especiales escapados ("\t"
, "\n"
) se traducen en caracteres de control REALES! El `"\n"será sustituido por el carácter de control ASCII que representa un carácter de nueva línea, que es precisamente el carácter que es ilegal en JSON. (En cuanto al carácter de continuación de línea, simplemente saca la nueva línea).
Así que lo que tienes que hacer es evitar que Python escape caracteres. Puedes hacerlo usando una cadena cruda (poniendo r
delante de la cadena, como en r"abc\ndef"
, o incluyendo una barra extra delante de la nueva línea ("abc\ndef"
).
Ambas cosas, en lugar de reemplazar "\n"con el verdadero carácter de control ASCII de la nueva línea, dejarán
"\n"como dos caracteres literales, que entonces JSON puede interpretar como un escape de nueva línea.