Jeg skriver noen datafiler i JSON-format og vil gjerne ha noen veldig lange strengverdier delt over flere linjer. Ved hjelp av pythons JSON-modul får jeg en hel del feil, enten jeg bruker \
eller \n
som escape.
Er det mulig å ha flerlinjestrenger i JSON? Det er mest for visuell komfort, så jeg antar at jeg bare kan slå på word wrap i editoren min, men jeg er bare litt nysgjerrig ...
JSON tillater ikke ekte linjeskift. Du må erstatte alle linjeskift med \n
.
f.eks:
"første linje andre linje""
kan lagres med:
"første linje"nandre linje"
Merk:
for Python
skal dette skrives som:
"første linje\\nandre linje"
hvor \\
er for å slippe backslash, ellers vil python behandle \n
som
kontrolltegnet "ny linje"
Jeg har måttet gjøre dette for et lite Node.js-prosjekt og fant denne 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>"
],
}
Dette ser ganske pent ut for meg, bortsett fra at jeg må bruke doble anførselstegn overalt. Men ellers kunne jeg kanskje bruke YAML, men det har andre fallgruver og støttes ikke naturlig. Når den er analysert, bruker jeg bare myData.modify_head.join('\n')
eller myData.modify_head.join()
, avhengig av om jeg vil ha et linjeskift etter hver streng eller ikke.
Dette er et veldig gammelt spørsmål, men jeg kom over dette på et søk, og jeg tror jeg vet kilden til problemet ditt.
JSON tillater ikke " ekte " nye linjer i dataene; det kan bare ha rømt nye linjer. Se svar fra @YOU. I følge spørsmålet ser det ut til at du forsøkte å unnslippe linjeskift i Python på to måter: ved å bruke linjefortsettelseskarakteren ("\"
) eller ved å bruke "\n"
som en flukt.
Men husk: hvis du bruker en streng i python, blir spesielle escaped-tegn ("\t"
, "\n"
) oversatt til virkelige kontrolltegn! "\n"
vil bli erstattet med ASCII-kontrolltegnet som representerer et nytt linjetegn, som er nettopp tegnet som er ulovlig i JSON. (Når det gjelder linjefortsettelsestegnet, tar det ganske enkelt ut ny linje).
Så det du trenger å gjøre er å forhindre Python i å unnslippe tegn. Du kan gjøre dette ved å bruke en rå streng (sett r
foran strengen, som i r"abc\ndef"
, eller ved å inkludere en ekstra skråstrek foran ny linje ("abc\\ndef"
).
Begge de ovennevnte alternativene vil, i stedet for å erstatte "\n"
med det virkelige ASCII-kontrolltegnet for ny linje, etterlate "\n"
som to bokstavelige tegn, som JSON kan tolke som en newline escape.