2017-05-30 18 views
0

海蘭大家,我有一些問題,分割字符串,因爲當我登錄她的價值似乎確定,但在最終結果中出現的「\」之類,分割字符串用「」的Node.js

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

所以我有這樣的代碼

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); 
} 

而且我的日誌:

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}" 

這究竟是爲什麼?

---解決

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

回答

0

這沒什麼可擔心的。這個「\」實際上並不存在於字符串中。

當您在node.js中使用JSON.stringify時,結果總是用「\」來轉義特殊字符,雙引號是特殊字符。該字符是unix轉義字符。這就是爲什麼它無處不在。

+0

的問題是,我通過郵寄發送給終端有這種「\」出現...... –

+0

如果您是通過POST請求發送,你看那些「\」 S,這意味着服務器認爲,它收到一個字符串。您必須在發佈請求中將標題設置爲「Content-Type」:「application/json」。然後服務器會認爲它實際上是一個JSON對象而不是一個字符串。 – ardilgulez

+0

我已經解決了我的問題,謝謝BTW :) –

0

嘗試使用下面的代碼刪除轉義序列

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

您可以替換他們這樣

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

謝謝,解決我的問題... –

0

您的JSON字符串使用「-marks。 由於JSON字符串本身,我們需要一個解決方案來告訴編譯器哪些「標記標記了字符串,哪些」標記是字符串本身的一部分。

要做到這一點,它非常c在各種語言之間使用-character,並通過鍵入例如\「,你'逃避'的」標誌。

想象一下這樣的字符串:他對我說:「你好」。現在,如果我們想使這個爲一個字符串,我們可以嘗試「他對我說:‘’。」您好,儘管編譯器會看到2個字符串和丟失時期,因爲它沒有的起點和終點之間的區別字符串和「 - 標記是內容本身的一部分

當你console.log()一個實際的字符串,它不會顯示」 - 標記顯示字符串的開始和結束,因爲它是不必要的。因此,沒有必要逃避字符串本身的「標記」。

無論createLog()函數做什麼,它顯然需要注意字符串下來,因爲它是一個實際的字符串,因此它需要逃脫帶有'\'符號的標記。