Javascript JSON stringify正在添加反斜杠

Javascript JSON stringify正在添加反斜杠,javascript,angularjs,json,stringify,Javascript,Angularjs,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',

当字符串直接发送到请求时,不会添加任何斜杠

    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"}
但如果字符串被设置为object的属性值,并且object被发送到服务器,则字符串有反斜杠

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

有人能看一下吗?

如果你严格规定它是正确的行为。因为现在它不再是一个物体了。为什么不像这样把它完整地发送到服务器呢。数据可以是字符串或对象

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

如果必须以字符串形式发送。然后,您必须在服务器上对其进行json_解码。

由于您在第二个代码段中为Angular对象提供了
数据
选项,因此值被双重编码–一次由您编码,一次由
$http
编码。您可能没有必要使用
JSON.stringify()
。不,我在同一个数据对象中有其他属性,而在每个字符串类型的属性中。因此,Values对象需要作为字符串发送。然后,您必须在服务器上对其进行json_解码,才能再次获取对象。@ramaroam如果
“Values”
的值需要是字符串,则必须使用反斜杠来区分哪些双引号是字符串中的字符(带反斜杠)哪些是语法(字符串文字分隔符)。“那是不可避免的。”乔纳坦洛诺夫斯基说,“那么,斜杠应该从哪里去掉呢?”?在服务器端?@JonathanLonowski,正如我们看到的示例,Values对象只字符串化一次。我猜$http再一次字符串化了整个数据对象。