Sto scrivendo alcuni file di dati in formato JSON e vorrei avere alcuni valori di stringa molto lunghi divisi su più righe. Usando il modulo JSON di python ottengo un sacco di errori, sia che usi o
n` come escape.
È possibile avere stringhe multilinea in JSON? E' soprattutto per comodità visiva, quindi suppongo di poter semplicemente attivare il word wrap nel mio editor, ma sono solo un po' curioso...
JSON non permette vere interruzioni di riga. Devi sostituire tutte le interruzioni di riga con \n
.
es:
"prima linea seconda riga"
può essere salvato con:
"prima linea seconda linea"
Nota:
per Python
, questo dovrebbe essere scritto come:
prima linea
, seconda linea
.
dove ``è per l'escape del backslash, altrimenti python tratterà
n`` come
il carattere di controllo "nuova linea"
Ho dovuto farlo per un piccolo progetto Node.js e ho trovato questo work-around:
{
"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>"
],
}
Questo mi sembra abbastanza pulito, a parte il fatto che devo usare i doppi apici ovunque. Anche se altrimenti potrei, forse, usare YAML, ma questo ha altre insidie e non è supportato nativamente. Una volta analizzato, uso semplicemente myData.modify_head.join('\n')
o myData.modify_head.join()
, a seconda se voglio un'interruzione di riga dopo ogni stringa o no.
Questa è una domanda molto vecchia, ma mi sono imbattuto in questo su una ricerca e penso di conoscere la fonte del tuo problema.
JSON non consente "real" newlines nei suoi dati; può avere solo newlines sfuggiti. Vedi la risposta di @YOU. Secondo la domanda, sembra che tu abbia tentato di sfuggire alle interruzioni di riga in Python in due modi: usando il carattere di continuazione della riga ("\quot;
) o usando "\n"
come escape.
Ma tenete a mente: se state usando una stringa in python, i caratteri speciali di escape ("\t"
, "\n"
) sono tradotti in caratteri di controllo REALI! Il "\n"
sarà sostituito con il carattere di controllo ASCII che rappresenta un carattere newline, che è precisamente il carattere che è illegale in JSON. (Come per il carattere di continuazione di linea, semplicemente toglie il newline).
Quindi quello che dovete fare è evitare che Python faccia l'escape dei caratteri. Puoi farlo usando una stringa grezza (metti r
davanti alla stringa, come in r"abc\ndef"
, o includendo una barra extra davanti al newline ("abc\ndef"
).
Entrambi, invece di sostituire "\n"
con il vero carattere di controllo ASCII newline, lasceranno "\n"
come due caratteri letterali, che poi JSON può interpretare come un escape newline.