2016-04-23 5 views
1

Ich habe ein Javascript-Objekt, das eine Eigenschaft mit Werten eines anderen JSON Stringed Objekt enthält. Ich kann die gedruckte Version der Zeichenfolge nicht in Objektform abrufen. Siehe den folgenden Code. Der console.log Ausgabeinhalt von json Zeichenfolge ist genau so rechts von jsonFromStr. JSON.parse(json) ist jedoch in Ordnung, während JSON.parse(jsonFromStr) Fehler ist. Was ist hier falsch?Javascript JSON parse und stringify für mehrere Ebenen

jsfiddle: http://jsfiddle.net/jma7889/qtmmpj2t/

level2Obj = { key2a: "foo", key2b: 3}; 
level2ObjJson = JSON.stringify(level2Obj); 
level1Obj = {key1a: "bar", key1b: {level2ObjJson}}; 

json = JSON.stringify(level1Obj); 
jsonFromStr = '{"key1a":"bar","key1b":{"level2ObjJson":"{\"key2a\":\"foo\",\"key2b\":3}"}}'; // same than json 

objFromStrify = JSON.parse(json); // OK 
objFromAssignedString = JSON.parse(jsonFromStr); // Uncaught SyntaxError: Unexpected token l in JSON at position 45 

Antwort

2

Wenn Sie dies tun wird es funktionieren:

jsonFromStr = '{"key1a":"bar","key1b":{"level2ObjJson":"{\\\"key2a\\\":\\\"foo\\\",\\\"key2b\\\":3}"}}'; 

Der Grund, dass Ihre Version nicht funktioniert, ist, dass die Escape-Sequenz \" in diesem Moment aufgelöst wird, so dass der tatsächliche Wert von jsonFromStr wird:

'{"key1a":"bar","key1b":{"level2ObjJson":"{"key2a":"foo","key2b":3}"}}' 

... was ungültige JSON ist.

Sie müssen diese Escapes in der JSON-Zeichenfolge nicht auflösen, indem Sie die Escape-Sequenz selbst mit zusätzlichen Schrägstrichen verlassen.

+0

Es funktioniert so, danke! –

+0

Gern geschehen. – trincot

0
jsonFromStr = '{"key1a":"bar","key1b":{"level2ObjJson":{\"key2a\":\"foo\",\"key2b\":3}}}'; 

Sie haben eine extra "" für den Wert der level2ObjJson Schlüssel ersetzen jsonFromStr im Code mit dem obigen Code.