2017-05-03 11 views
1

Ich habe versucht, herauszufinden, warum die folgende JSON-Eingabe in JSON.parse-Funktion nicht analysiert werden kann.JSON Parsing-Fehler mit Backslash

Der obige JSON wird von JSON.NET zurückgegeben.

Ich habe mehrere Methoden ausprobiert, um das zu erreichen. Wie Sie sehen können, ist der Backslash maskiert und https://jsonlint.com/ kann es analysieren.

Ich habe auch eine fehlerhafte Probe bei https://jsfiddle.net/ckp0uc0p/3/.

Jede Hilfe wird geschätzt.

+0

Mögliche Duplikate von [Warum benötigt der jQuery JSON Parser für Backslashes doppelte Escaping?] (Http://stackoverflow.com/questions/3807537/why-does-the-jquery-json-parser-need-double-escaping -for-backslashes) – Brennan

+0

Leider kontrolliere ich die Daten nicht. Ich habe JSON.NET getaggt, da diese Daten von dieser Komponente analysiert und auf diese Weise gespeichert werden. – Hozikimaru

+0

Der von Ihnen gepostete JSON ist gültig. Wie genau versuchst du es zu analysieren? Werden sie in die JavaScript-Quelle als String-Literal eingefügt, wie in Ihrem Beispiel gezeigt? –

Antwort

2

Der beste Weg zu injizieren JSON in JavaScript Quelle hinzufügen müssen Code (wenn das JavaScript mit einer serverseitigen Sprache generiert wird), wird es direkt dort eingefügt, wo Sie es brauchen, und nicht in einem String-Literal, das benötigt wird geparst werden.

Zum Beispiel:

var foo = <json blob>; 

, so dass das Ergebnis wird sein,

var foo = {"World":"Hello\\Test"}; 

JavaScript wird diese Interpretation als Objektliteral was zu einem Objekt, das, was Sie wollen, ist zu komm trotzdem. Dies vermeidet alle Probleme mit "verschachtelten" Escape-Sequenzen.

2

Sie müssen zwei \\ für jeden Backslash hinzufügen, der angezeigt werden soll. Wenn Sie eine json sind Parsen, 2 Schrägstriche angezeigt werden Sie 4.

// inside a string to be parsed as json 
 
var json = '{"World":"Hello\\\\Test"}' 
 
console.log(JSON.parse(json)) 
 

 
// directly in an object 
 
var object = {"World": "Hello\\Test"} 
 
console.log(object)

0

try 
 
{ 
 
    var res = '{"World":"Hello\\\\Test"}'; 
 
\t var s = JSON.parse(res); 
 
    console.log(JSON.stringify(s)); 
 
    
 
} catch(error) { 
 
\t alert(error); 
 
}

Verwandte Themen