2016-03-02 103 views
3

當字符串化字符串直接發送到請求時,它不會添加任何斜線。JSON stringify正在添加反斜槓

var data = { "A": "Aa", "B": "Bb", "C": "Cc" }; // This is JSON object 
     data = JSON.stringify(data); // Getting stringified 
    var obj = {method: "POST", 
       url: 'http://..XX..XXX.....com', 
       data: data // String is being sent as it is 
       }; 
    $http(obj);// Have no slashes added 
//Output: {"A":"Aa","B":"Bb","C":"Cc"} 

但是,如果將字符串化的字符串設置爲對象的屬性值,並將對象發送到服務器,則字符串具有反斜槓。

 var data = { "A": "Aa", "B": "Bb", "C": "Cc" }; 
      data = JSON.stringify(data); 
     var obj = {method: "POST", 
        url: 'XXX', 
        data: { // String is being sent as a value of object property "Values" 
         "Values": data 
         } 
        }; 
     $http(obj);//Slashes are added 

//output: {"Values":"{\"A\":\"Aa\",\"B\":\"Bb\",\"C\":\"Cc\"}"} 

有人可以看一看嗎?

+4

由於您在第二個代碼片段中給出了一個Angular的對象及其'data'選項,所以這些值將被雙重編碼 - 一次由您和一次爲'$ http'。您可能不需要使用'JSON.stringify()'。 –

回答

3

如果您將其正確的行爲串聯起來。因爲現在它不再是一個對象。爲什麼不把它像這樣發送到服務器呢?數據可以是字符串或對象

var data = { "A": "Aa", "B": "Bb", "C": "Cc" }; 
var obj = {method: "POST", 
       url: 'XXX', 
       data: data 
       }; 
$http(obj); 

如果必須以字符串形式發送它。然後你必須在服務器上json_decode。

+0

不,我在字符串類型的每個屬性中的相同數據對象中都有其他屬性。因此,Values對象需要作爲字符串發送。 –

+2

如果您必須將其作爲字符串發送。然後,您必須在服務器上對其進行json_decode,以再次獲取對象。 – Kordi

+0

@RamaRaoM如果'「Values」的值需要是一個字符串,那麼反斜槓是區分哪些雙引號是字符串中的字符(帶反斜槓)和哪些是語法(字符串字面分隔符)所必需的。這是不可避免的。 –