TLDR: Eine Lösung für das Problem des Autors.
Verwenden Sie String.raw
wörtlich:
var data = String.raw`{"count" : 1, "stack" : "sometext\n\n"}`;
Aus irgendeinem Grund konzentrieren sich alle Antworten hier auf das Parsen einer JSON-Zeichenfolgendarstellung in JavaScript, was zu Verwirrung darüber führen kann, wie man Zeilenumbrüche in JSON darstellt. Letzteres ist nicht sprachabhängig.
Streng nach dem Titel der Frage:
Wie behandle ich Zeilenumbrüche in JSON?
Nehmen wir an, Sie parsen eine JSON-Datei mit dem folgenden Code in node
(es könnte allerdings jede Sprache sein):
let obj = JSON.parse(fs.readFileSync('file.json'));
console.log(obj.mykey)
Nachfolgend ist die Ausgabe für jeden der möglichen Inhalte von file.json
:
Eingang 1:
{
"mykey": "my multiline
value"
}
Ausgang 1:
SyntaxError: Unexpected token
Eingabe 2:
{
"mykey": "my multiline\nvalue"
}
Ausgang 2:
my multiline
value
Eingabe 3:
{
"mykey": "my multiline\\nvalue"
}
Ausgang 3:
my multiline\nvalue
Schlussfolgerung 1:
Zur Darstellung eines Zeilenumbruchs innerhalb einer json
Datei sollten wir die \n
Zeichen . Zur Darstellung der \n
sollten wir \\n
.
Wie würden wir jede der oben genannten Eingaben mit JavaScript (anstelle einer Eingabedatei) definieren?
Wenn wir eine Zeichenkette, die JSON enthält, in JavaScript definieren müssen, ändern sich die Dinge ein wenig aufgrund der besonderen Bedeutung, die \n
hat auch für JavaScript. Beachten Sie aber auch, wie String.raw
Buchstäblich behebt dies .
Eingabe1:
let input1 = '{"mykey": "my multiline\nvalue"}'
//OR
let input1 = `{
"mykey": "my multiline
value"
}`;
//OR
let input1 = String.raw`{
"mykey": "my multiline
value"
}`;
console.log(JSON.parse(input1).mykey);
//SyntaxError: Unexpected token
//in JSON at position [..]
Eingabe 2:
let input2 = '{"mykey": "my multiline\\nvalue"}'
//OR
let input2 = `{
"mykey": "my multiline\\nvalue"
}`;
//OR (Notice the difference from default literal)
let input2 = String.raw`{
"mykey": "my multiline\nvalue"
}`;
console.log(JSON.parse(input2).mykey);
//my multiline
//value
Eingabe 3 :
let input3 = '{"mykey": "my multiline\\\\nvalue"}'
//OR
let input3 = `{
"mykey": "my multiline\\\\nvalue"
}`;
//OR (Notice the difference from default literal)
let input3 = String.raw`{
"mykey": "my multiline\\nvalue"
}`;
console.log(JSON.parse(input3).mykey);
//my multiline\nvalue
Schlussfolgerung 2:
Zur Definition einer json
Zeichenkette in javascript die Der einfachste Weg wäre die Verwendung von String.raw
weil es kein Escaping benötigt (abgesehen vom Backtick, der wie folgt escaped wird String.raw`abc${"`"}def`
).
Natürlich ist es am einfachsten, die json
in Javascript ist im Allgemeinen die Umwandlung eines Javascript-Objekts in json (mit JSON.stringify
).