Ich habe JSON generiert und versuche, es in ein Objekt in JavaScript zu ziehen. Ich bekomme immer wieder Fehler. Folgendes habe ich:
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = eval('('+data+')');
Dies gibt mir einen Fehler:
unterminated string literal
Mit JSON.parse(data)
werden ähnliche Fehlermeldungen angezeigt: " Unexpected token ↵
" in Chrome und " unterminated string literal
" in Firefox und IE.
Wenn ich das herausnehme, \n
verschwindet sometext
der Fehler in beiden Fällen. Ich kann nicht herausfinden, warum das \n
macht eval
und JSON.parse
scheitert.
javascript
json
newline
Eisbär
quelle
quelle
Antworten:
Ich denke, das ist was du willst:
(Sie müssen das "\" in Ihrer Zeichenfolge maskieren (in ein doppeltes "\" umwandeln), sonst wird es zu einer neuen Zeile in der JSON-Quelle, nicht in den JSON-Daten.)
quelle
Sie benötigen eine Funktion, die ersetzt wird
\n
,\\n
fallsdata
es sich nicht um ein Zeichenfolgenliteral handelt.Ergebnis
dataObj
wird seinquelle
.replace("\\n", "\\\\n")
.replace(/\n/g, "\\\\n")
.replace("\n", "\\n")
sollte den Job gut machen !! Zum Beispielvar test = [{"description":"Some description about the product. This can be multi-line text."}]; console.log(JSON.parse(test.replace(/\n/g, "\\n")));
wird das Objekt perfekt in der Browserkonsole als[{"description":"Some description about the product.\nThis can be multi-line text."}]
\n
in den Wert einfügen sollte .eval
Funktion auch verwendet werden. 17 positive Stimmen ???Gemäß der Spezifikation http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf :
Sie können also nicht direkt übergeben
0x0A
oder0x0C
codieren. Es ist verboten! Die Spezifikation schlägt vor, Escape-Sequenzen für einige genau definierte Codes vonU+0000
bis zu verwendenU+001F
:\f
repräsentiert das Formular-Feed-Zeichen (U+000C
).\n
repräsentiert das Zeilenvorschubzeichen (U+000A
).Da die meisten Programmiersprachen
\
zum Zitieren verwenden, sollten Sie die Escape-Syntax umgehen (Double-Escape - einmal für Sprache / Plattform, einmal für JSON selbst):quelle
Sie können Ihre Zeichenfolge einfach auf dem Server maskieren, wenn Sie den Wert des JSON-Felds schreiben, und ihn beispielsweise beim Abrufen des Werts im Client-Browser entfernen.
Die JavaScript-Implementierung aller gängigen Browser verfügt über den Befehl unescape.
Beispiel:
Auf dem Server:
Im Browser:
quelle
Vielleicht möchten Sie sich diese C # -Funktion ansehen, um der Zeichenfolge zu entkommen:
http://www.aspcode.net/C-encode-a-string-for-JSON-JavaScript.aspx
quelle
>
?Ich habe diese Funktion verwendet, um Zeilenumbrüche oder andere Zeichen in Daten zu entfernen, um JSON-Daten zu analysieren:
quelle
JSON.stringify
würde die obige Zeichenfolge in konvertieren
wie hier erwähnt
json stringify
quelle
Ich bin auf dieses Problem gestoßen, als ich eine Klasse in PHP 4 erstellt habe, um json_encode zu emulieren (verfügbar in PHP 5). Folgendes habe ich mir ausgedacht:
Ich habe die hier genannten Regeln befolgt . Ich habe nur das verwendet, was ich brauchte, aber ich denke, dass Sie es in der Sprache, die Sie verwenden, an Ihre Bedürfnisse anpassen können. Das Problem in meinem Fall war nicht, wie ich ursprünglich dachte, Newlines, sondern das / nicht entkommen. Ich hoffe, dies verhindert, dass jemand anderes die kleinen Kopfschmerzen hat, die ich hatte, um herauszufinden, was ich falsch gemacht habe.
quelle
Wie ich Ihnen Frage zu verstehen, ist es nicht über JSON Parsen , weil Sie Ihre JSON in Ihren Code direkt kopieren und einfügen können - so , wenn dies der Fall ist, dann richtet einfach kopieren Sie Ihre JSON ist
dataObj
variabel , ohne es mit einfachen Anführungszeichen Einwickeln (Tipp:eval==evil
)quelle