Ich schreibe einige Datendateien im JSON-Format und möchte einige wirklich lange String-Werte über mehrere Zeilen aufgeteilt haben. Wenn ich das JSON-Modul von Python verwende, erhalte ich eine ganze Reihe von Fehlern, egal ob ich \
oder \n
als Escape verwende.
Ist es möglich, mehrzeilige Strings in JSON zu haben? Es ist vor allem für den visuellen Komfort, so dass ich vermute, ich kann einfach Wortumbruch in meinem Editor einschalten, aber ich bin nur irgendwie neugierig...
JSON erlaubt keine echten Zeilenumbrüche. Sie müssen alle Zeilenumbrüche durch "n" ersetzen.
z.B.:
"erste Zeile zweite Zeile"
kann gespeichert werden mit:
"erste Zeile\nzweite Zeile"
Anmerkung:
Für Python
sollte dies geschrieben werden als:
"erste Zeile", "zweite Zeile".
wobei \\
für das Escapen des Backslashs steht, ansonsten behandelt Python \n
als
das Steuerzeichen "neue Zeile"
Ich musste dies für ein kleines Node.js-Projekt tun und fand diesen Workaround:
{
"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>"
],
}
Das sieht für mich ganz ordentlich aus, abgesehen davon, dass ich überall doppelte Anführungszeichen verwenden muss. Ansonsten könnte ich vielleicht YAML verwenden, aber das hat andere Tücken und wird nicht nativ unterstützt. Nach dem Parsen verwende ich einfach myData.modify_head.join('\n')
oder myData.modify_head.join()
, je nachdem, ob ich nach jedem String einen Zeilenumbruch haben möchte oder nicht.
Dies ist eine wirklich alte Frage, aber ich bin bei einer Suche darauf gestoßen und ich glaube, ich kenne die Ursache für Ihr Problem.
JSON erlaubt keine "echten" Zeilenumbrüche in seinen Daten; es kann nur escapete Zeilenumbrüche haben. Siehe die Antwort von @YOU. Gemäß der Frage sieht es so aus, als ob Sie versucht haben, Zeilenumbrüche in Python auf zwei Arten zu vermeiden: durch Verwendung des Zeilenfortsetzungszeichens ("line continuation character") oder durch Verwendung von "\n"" als Escape.
Aber denken Sie daran: Wenn Sie eine Zeichenkette in Python verwenden, werden spezielle escapete Zeichen ("\t"
, "\n"
) in ECHTE Steuerzeichen übersetzt! Das Zeichen "\n"
wird durch das ASCII-Steuerzeichen ersetzt, das ein Zeilenumbruchzeichen darstellt, also genau das Zeichen, das in JSON illegal ist. (Was das Zeilenfortsetzungszeichen betrifft, so wird der Zeilenumbruch einfach herausgenommen.)
Sie müssen also verhindern, dass Python Zeichen umwandelt. Sie können dies tun, indem Sie eine rohe Zeichenkette verwenden (stellen Sie r
vor die Zeichenkette, wie in r"abc\ndef"
, oder indem Sie einen zusätzlichen Schrägstrich vor dem Zeilenumbruch einfügen ("abc\ndef"
).
In beiden Fällen wird "\n"
nicht durch das echte ASCII-Steuerzeichen für den Zeilenumbruch ersetzt, sondern "\n"
wird als zwei Buchstabenzeichen belassen, die JSON als Zeilenumbruch interpretieren kann.