Flerlinjestrenger i JSON
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 ...
576
3
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:
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 ir"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.