Cadenas multilínea en JSON

Estoy escribiendo algunos archivos de datos en formato JSON y me gustaría tener algunos valores de cadena muy largos divididos en varias líneas. Al usar el módulo JSON de python, recibo muchos errores, ya sea que use \ o \n como escape.

¿Es posible tener cadenas de múltiples líneas en JSON? Es principalmente para la comodidad visual, así que supongo que puedo cambiar el contenido de mi editor, pero soy curioso …

JSON no permite saltos de línea reales. Necesita reemplazar todos los saltos de línea con \n .

Tuve que hacer esto para un proyecto pequeño de Node.js y encontré esta solución alternativa:

 { "modify_head": [ "" ], "modify_body": [ "", "" ], } 

Esto se ve bastante limpio para mí, aparte de eso tengo que usar comillas dobles en todas partes. Aunque de lo contrario, podría, tal vez, usar YAML, pero eso tiene otros inconvenientes y no es compatible de forma nativa. Una vez analizado, solo 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.

¡Mira la especificación ! La producción de charla de la gramática JSON puede tomar los siguientes valores:

  • cualquier-Unicode-character-except- " -or- \ -or-control-character
  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u cuatro-hex-dígitos

Las líneas nuevas son “caracteres de control”, por lo tanto, no, es posible que no tenga una nueva línea literal dentro de la cadena. Sin embargo, puedes codificarlo usando la combinación de \n y \r que necesites.

Esta es una pregunta muy antigua, pero me encontré con esto en una búsqueda y creo saber el origen de tu problema.

JSON no permite líneas nuevas “reales” en sus datos; solo puede haber escapado nuevas líneas. Ver la respuesta de @YOU, arriba. Según la pregunta, parece que intentaste escapar de los saltos de línea en Python de dos maneras: usando el carácter de continuación de línea (“\”) o usando “\ n” como escape.

Pero tenga en cuenta: si está utilizando una cadena en python, los caracteres especiales escapados (“\ t”, “\ n”) se traducen en caracteres de control REAL. El “\ n” se reemplazará con 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).

Entonces, lo que debes hacer es evitar que Python escape de los personajes. Puede hacer esto usando una cadena sin formato (ponga r delante de la cadena, como en r"abc\ndef" , o incluyendo una barra adicional delante de la nueva línea ( "abc\\ndef" ).

Lo anterior, en lugar de reemplazar “\ n” con el carácter de control ASCII de línea nueva real, dejará “\ n” como dos caracteres literales, que luego JSON puede interpretar como un escape de nueva línea.

JSON no permite romper líneas para facilitar la lectura.

Su mejor opción es usar un IDE que se ajuste en línea para usted.

Escriba el valor de propiedad como una matriz de cadenas. Como ejemplo dado aquí https://gun.io/blog/multi-line-strings-in-json/ . Esto ayudará.

Siempre podemos utilizar una matriz de cadenas para cadenas de varias líneas como las siguientes.

 { "singleLine": "Some singleline String", "multiline": ["Line one", "line Two", "Line Three"] } 

Y podemos iterar fácilmente la matriz para mostrar el contenido en forma de línea múltiple.

Use regex para reemplazar todas las ocurrencias de \r\n con \\n .

Esto funcionó para mí en Scala.

 val newstr = str.replace("\r\n", "\\n") 

¿Es posible tener cadenas de múltiples líneas en JSON?

Sí. Acabo de probar esto ahora con mi navegador web Firefox presionando F12, haciendo clic en la consola y escribiendo en la parte inferior de la pantalla.

 x={text:"hello\nworld"} 

Objeto x acaba de crearse a partir de una cadena de formato JSON que contiene una cadena de varias líneas.

 console.log(x.text) hello world 

x.text se muestra mostrando que es una cadena de varias líneas.

Estas dos pruebas muestran que el intérprete de JavaScript de Firefox se complace en crear y usar JSON con cadenas multilíneas.

Más pruebas con JSON.stringify y JSON.parse mostraron que el intérprete de Javascript puede convertir un objeto que contiene cadenas de JSON.stringify JSON.parse a JSON y analizarlo de nuevo sin ningún problema.

En el pasado, he almacenado las obras completas de Shakespeare como una propiedad en un objeto JSON y luego las he enviado a través de Internet, sin corrupción.

Ejemplo

Aquí hay una cadena de dos líneas ingresada en tres líneas

 x={text:"expert\ s\nex\ change"} 

Podemos mostrar el objeto

 console.log(x) 

dando

 Object { text: "experts\nexchange" } 

o la cadena

 console.log(x.text) 

dando

 experts exchange 

El final de las líneas en la cadena es el resultado del uso de \ n y las múltiples líneas de entrada se logran usando simplemente \ al final de la línea.

En la práctica, es posible que desee sincronizar sus terminaciones de línea con las de la cadena, por ejemplo

 x={text:"experts\n\ exchange"} 

Longitud de cadena multi-línea

 console.log("Hello\nWorld".length) 11 console.log("Hello World".length) 11 

Tenga en cuenta que la cadena con la nueva línea no es más larga que la cadena con el espacio. Aunque se escribieron dos caracteres en el teclado (‘\’ y ‘n’), solo se almacena un carácter en la cadena.

Envuelva cada línea en comillas y termínelas con una coma como se muestra a continuación:

 "content": [ "This is the first line", "this is second", "and so on" ] 

Use json5 (cargador) vea https://json5.org/ – example (por json5)

{lineBreaks: “¡Mira, mamá! \ No \ n’s!”,}

Intenta usar el valor de cadena codificada en base64 . Trabajó para mí la mayor parte del tiempo.

 { "singleLine": "Some singleline String", "multiline": ["Line one", "line Two", "Line Three"] } 

después de la cadena codificada en base64 parece

 { "singleLine": "Some singleline String", "multiline": "TGluZSBvbmUKTGluZSBUd28KTGluZSBUaHJlZQ==" } 

La encoding y deencoding de base64 está disponible en todos los idiomas.

{{nombre}}
{{name1}}

my.opt.push ({‘nombre’: ‘línea1’, ‘nombre1’: ‘línea2’)

simplemente podría ejecutar el siguiente código con su cadena multilínea deseada entre tilde ~ personaje:

 var multiLineString = ` this is the multiline String `; JSON.stringify(multiLineString); 

Solo incluya tags de párrafo para que se vea limpio y más eficiente.

Ejemplo: “cuerpo”: ”

Párrafo 1 aquí.

Párrafo 2 aquí.

“,

 fieldval = rs.getString(rs.getMetaData().getColumnName(i)) .trim() .replace("\\", "/") .replace("\r\n", "\\n") .replace("''", "\\n") .replace("\"", "\\n"); 

escriba cualquier texto en el bloc de notas ++ con multi línea múltiple y luego presione ctl + a y ctl + j para organizarlos en una línea

En json file escribe:

 { "key":"multi line copied from notepad++" } 

poner el texto de líneas múltiples en el archivo txt y luego

 var str = { text: cat('path_to_file/text.txt') } 

(Funciona en mongoDB)

Puede intentar colocar

entre oraciones.