2016-03-02 1002 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”的值需要是一个字符串,那么反斜杠是区分哪些双引号是字符串中的字符(带反斜杠)和哪些是语法(字符串字面分隔符)所必需的。这是不可避免的。 –