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 ...

JSON tillater ikke ekte linjeskift. Du må erstatte alle linjeskift med \n.

f.eks:

"første linje andre linje&quot"

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"

Kommentarer (8)

Jeg har måttet gjøre dette for et lite Node.js-prosjekt og fant denne work-around:


{
 "modify_head": [

  "<script type='text/javascript'>",
  "",
  "</script>"

 ],

 "modify_body": [

  "<input type='text' id='inputtext'>
Kommentarer (7)

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.

Kommentarer (0)