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再一次字符串化了整个数据对象。