【问题标题】:JSON stringify is adding backslashesJSON stringify 正在添加反斜杠
【发布时间】:2016-06-14 21:01:47
【问题描述】:

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

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

有人可以看一次吗?

【问题讨论】:

  • 由于您在第二个 sn-p 中为 Angular 提供了一个带有 data 选项的对象,因此这些值被双重编码——一次由您编码,一次由 $http 编码。您可能没有必要使用JSON.stringify()

标签: javascript angularjs json stringify


【解决方案1】:

如果你把它的正确行为串起来。因为现在它不再是一个对象了。为什么不像这样将其完整发送到服务器。数据可以是字符串或对象

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

如果您必须将其作为字符串发送。然后你必须在服务器上对其进行 json_decode。

【讨论】:

  • 不,我在同一个数据对象中还有其他属性,在字符串类型的每个属性中。因此,Values 对象需要作为字符串发送。
  • 如果您必须将其作为字符串发送。然后你必须在服务器上对其进行 json_decode ,以再次获取一个对象。
  • @RamaRaoM 如果"Values"的值需要是一个字符串,那么反斜杠是必要的,以区分哪些双引号是字符串中的字符(带反斜杠),哪些是语法(字符串字面量)分隔符)。这是不可避免的。
  • @JonathanLonowski 那么应该在哪里删除斜线?在服务器端?
  • @JonathanLonowski 正如我们看到的示例,Values 对象仅被字符串化一次。我猜 $http 正在再次对总数据对象进行字符串化。
猜你喜欢
  • 2022-01-12
  • 2017-05-12
  • 2014-10-14
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2021-07-30
  • 1970-01-01
相关资源
最近更新 更多