JSON stringify 添加反斜杠

6
当字符串被直接发送请求时,它不会添加任何斜杠。
    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\"}"}

有人可以帮忙看一下吗?

关于it技术,我需要更多的具体信息。

4
由于您在第二个片段中向 Angular 提供了一个带有 data 选项的对象,因此值被双重编码 - 一次由您,一次由 $http。您使用 JSON.stringify() 的方式可能并不必要。 - Jonathan Lonowski
1个回答

7
如果你将其字符串化,这是正确的行为。因为现在它不再是一个对象。为什么不像这样把它完整地发送到服务器上呢?数据可以是一个字符串或一个对象。
var data = { "A": "Aa", "B": "Bb", "C": "Cc" };
var obj  = {method: "POST", 
               url: 'XXX',
               data: data
              };
$http(obj);

如果您必须将它作为字符串发送,则需要在服务器上对其进行json_decode。

不,我在同一数据对象中有其他属性,每个属性都是字符串类型。因此,Values对象需要作为字符串发送。 - Rama Rao M
2
如果您必须将其作为字符串发送,则必须在服务器上进行json_decode,以再次获取对象。 - Kordi
如果“Values”的值需要是字符串,则需要反斜杠来区分哪些双引号是字符串中的字符(带有反斜杠),哪些是语法(字符串文字定界符)。这是不可避免的。 - Jonathan Lonowski
@JonathanLonowski 那么斜杠该在哪里删除?在服务器端吗? - Rama Rao M
1
@JonathanLonowski 我们看这个例子,Values对象只被转换成字符串一次。我猜测$http方法又将整个数据对象再转换了一次。 - Rama Rao M
我想要将数据写入JSON文件,但是遇到了反斜杠的问题。如果不使用stringify方法,会出现以下错误:The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received an instance of Array - Timo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接