2017-05-30 4 views
0

Hy alle, ich habe ein paar Probleme mit Split eine Zeichenfolge, weil, wenn ich ihr Wert log ok scheint aber im Endergebnis erscheint „\“ wie,Split-String von „“ Node.js

"map":"{\"isRoot\": true, \"visible\": true}" instead of have "map":"{"isRoot": true, "visible": true}" 

So habe ich diesen Code

if(mapData!=undefined){ 
    var map = mapData.map; 
    console.log("sendDeviceInfo getServicesMapInfoById map >>>>>>>>>>>>>>>>>>>>> ", map); 
    sendData.map=map; 
    createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'sendDeviceInfo','sendData.map 1', sendData.map); 
} 

Und meine Protokolle:

sendDeviceInfo getServicesMapInfoById map >>>>>>>>>>>>>>>>>>>>> {"isRoot": true, "visible": true} 
4|wscontro | [2017-05-30 12:36:03.010] - debug: /opt/wscontroller/wscontroller-service/scripts/gps GpsController 58a8c61b-f11d-4874-91df-3a5205e4145f sendDeviceInfo sendData.map 1 "{\"isRoot\": true, \"visible\": true}" 

Warum ist das passiert?

--- Lösung

if(mapData!=undefined){ 
    var map = mapData.map; 
    var aux = map.split('\\').join(''); 
    var jsonObject = JSON.parse(aux); 
    sendData.map = jsonObject; 
} 

Antwort

0

Das ist nichts zu befürchten. Diese "\" s existieren tatsächlich nicht in der Zeichenkette.

Wenn Sie JSON.stringify in node.js verwenden, hat das Ergebnis immer "\" s, um Sonderzeichen zu vermeiden, und doppelte Anführungszeichen sind Sonderzeichen. Dieses Zeichen ist das Unix-Escape-Zeichen. Deshalb erscheint es irgendwie überall.

+0

Das Problem ist, dass ich dies per Post an einen Endpunkt senden und dort dieses "\" erscheint ... –

+0

Wenn Sie das über eine POST-Anfrage senden und Sie diese "\" s sehen, bedeutet dies, dass der Server das denkt es erhielt eine Zeichenfolge. Sie müssen einen Header in die Post-Anfrage als "Content-Type": "application/json" setzen. Dann wird der Server denken, dass es tatsächlich ein JSON-Objekt und keine Zeichenfolge ist. – ardilgulez

+0

Ich habe schon mein Problem gelöst danke :) –

0

Versuchen unter Code mit dem Escape-Sequenz

mapData = mapData.replace(/\\"/g, '"'); 
1

Sie sie Zeichenfolge wie diese

yourJsonString = yourJsonString.split('\\').join(''); 
var jsonObject = JSON.parse(yourJsonString); 
+0

Danke, das löst mein Problem ... –

0

Ihre Json ersetzen entfernen „-Marken verwenden. Da Json ein String selbst ist, Wir brauchen eine Lösung, um dem Compiler mitzuteilen, welche "-Markierungen die Zeichenkette markieren und welche" -Markierungen Teil der Zeichenkette selbst sind.

Um dies zu tun ist es sehr c Wenn Sie zwischen den Sprachen wechseln, um das -Zeichen zu verwenden, und indem Sie zum Beispiel "\" eingeben, "entkommen" Sie dem "-Zeichen.

Stellen Sie sich eine Saite wie diese vor: Er sagte zu mir: "Hallo". Nun, wenn wir dies zu einer Zeichenkette machen wollen, könnten wir versuchen "Er sagte zu mir:" Hi there ".", Obwohl der Compiler 2 Strings und eine verlorene Periode sehen wird, weil er nicht zwischen Anfang und Ende der Zeichenfolge und die "-Zeichen, die Teil des Inhalts selbst sind.

Wenn Sie console.log() eine tatsächliche Zeichenfolge, zeigt es nicht die" -Markierungen, die den Anfang und das Ende der Zeichenfolge anzeigen, da es nicht erforderlich ist. Aus diesem Grund müssen die "-Markierungen in der Zeichenkette selbst nicht entfernt werden.

Was auch immer die createLog() Funktion tut, muss sie anscheinend die Zeichenkette als eine tatsächliche Zeichenkette notieren, und deshalb muss sie entkommen die "-Zeichen mit einem '\' Zeichen.