Ik'ben wat databestanden aan het schrijven in JSON formaat en zou graag een aantal echt lange string-waarden gesplitst over meerdere regels willen hebben. Met behulp van python's JSON module krijg ik een heleboel fouten, of ik nu of
n` als escape gebruik.
Is het mogelijk om strings van meerdere regels in JSON te hebben? Het is vooral voor visueel comfort, dus ik veronderstel dat ik gewoon word wrap kan aanzetten in mijn editor, maar ik'ben gewoon nieuwsgierig...
JSON staat geen echte regeleindes toe. U moet alle regeleinden vervangen door ``.
bijv:
"eerste regel tweede regel"
kan worden opgeslagen met:
"eerste regel-tweede regel"
Opmerking:
voor Python
, moet dit geschreven worden als:
"eerste regel"tweede regel"
waarbij `de backslash weglaat, anders zal python
\n` behandelen als
het controle karakter "nieuwe regel"
Ik heb dit moeten doen voor een klein Node.js project en vond deze 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>"
],
}
Dit lijkt me wel netjes, behalve dat ik overal dubbele quotes moet gebruiken. Anders zou ik misschien YAML kunnen gebruiken, maar dat heeft weer andere valkuilen en wordt niet van nature ondersteund. Eenmaal geparsed, gebruik ik gewoon myData.modify_head.join('\n')
of myData.modify_head.join()
, afhankelijk van of ik een regeleinde wil na elke string of niet.
Dit is een heel oude vraag, maar ik kwam dit tegen bij een zoektocht en ik denk dat ik de bron van je probleem weet.
JSON staat geen "echte" nieuwe regels toe in zijn gegevens; het kan alleen ontsnapte nieuwe regels hebben. Zie het antwoord van @YOU. Volgens de vraag lijkt het erop dat je op twee manieren geprobeerd hebt om regeleindes te escapen in Python: door het regel continuatie karakter (""
) te gebruiken of door "\n"
te gebruiken als escape.
Maar let op: als u een string in python gebruikt, worden speciale ontsnapte tekens ("\t"
, "\n"
) vertaald in ECHTE besturingstekens! Het "\n"
zal worden vervangen door het ASCII controle teken dat een newline teken voorstelt, wat precies het teken is dat illegaal is in JSON. (Wat betreft het regel voortzetting karakter, het haalt gewoon de newline eruit).
Wat je dus moet doen is voorkomen dat Python karakters escaped. Je kunt dit doen door een raw string te gebruiken (zet r
voor de string, zoals in r"abc\ndef"
, of door een extra slash voor de newline te zetten ("abc\ndef"
).
Beide bovenstaande manieren zullen, in plaats van "\n"
te vervangen door het echte newline ASCII controle karakter, "\n"
laten staan als twee letterlijke karakters, die JSON dan kan interpreteren als een newline escape.