【问题标题】:Issue with JSON.stringify adding a extra \ and "" to my Json objectJSON.stringify 向我的 Json 对象添加额外的 \ 和 "" 的问题
【发布时间】:2012-12-04 16:44:00
【问题描述】:

您好,我正在使用 Javascript 创建一个对象数组,其中包含一个键和一个值,使用以下代码。

ValuesArray.push({ key: $(this).attr('someattribute'), value: $(this).val() });

结果我有这样的对象数组:

key:29; value: 'Country'
Key:12; value: '4,3,5'

当我尝试对其进行字符串化并在帖子中发送该 JSON 时,我在不想要的地方使用了错误的格式 JSON我遇到了麻烦。如何使用 stringify 创建一个干净的 JSON

var jObject = JSON.stringify(ValuesArray);

我的 JSON 现在是错误的:

{
  "JObject": "[{\"key\":\"29\",\"value\":\"Country\"},  {\"key\":\"30\",\"value\":\"4,3,5\"}]"
}

我想要一个这样的 JSON 对象

{
  "JObject": [{"key":"29","value":"Country"},{"key":"30","value":"4,3,5"}]
}

[] 和字符 \ 周围没有引号

任何解决它的好主意。

谢谢

详细说明我如何将 JSON 发送到我的 API 这就是我将 JSON 发送到我的 Web API 的方式:

function PostAPIRequest(address) {

           var jObject = JSON.stringify(ValuesArray);

           var responseJson = null;
           $.ajax({
               url: address,
               type: 'POST',
               dataType: 'json',
               data: { JObject: jObject },
               success: function (data) {
                   responseJson = data
                   ProcessDataResponse(responseJson);
                   //TODO: REFRESH THE DATA GRID
               },
               error: function (xhr, ajaxOptions, thrownError) {
                   //TODO redirect to the error page and send error email there.
                   alert(xhr.status);
                   alert(thrownError);
               }
           })
       }

这就是我在我的 API 控制器中接收它的方式

...
  // POST api/datavalues/5


   public string Post(int id, JObject  value)
    {
        var temp = value;

...

【问题讨论】:

    标签: javascript arrays json serialization deserialization


    【解决方案1】:

    看起来您正在将一个字符串作为值放置在您的地图中。你应该这样做:

    var objMap = {"JObject" : ValuesArray}; var json = JSON.stringify(objMap)

    发生的情况是您正在对值数组进行双重 json 编码 - 请注意,您的“无效”JSON 值实际上是 JSON 字符串,而不是您想要的数组。

    编辑 看起来您正在将 JSON 映射字符串插入一个数组,然后对其进行字符串化。这是一个 jsfiddle,可以帮助您获得所需的内容 - http://jsfiddle.net/4G5nF/

    在您的发帖请求中,试试这个

    var jObject = {"JObject" : ValuesArray};
    $.ajax({   url: address,
               type: 'POST',
               dataType: 'json',
               data: jObject,
               success: function (data)  { .. }});
    

    注意数据属性的变化。这是一个自动为您 JSON 化的值。

    【讨论】:

    • 谢谢 SB 但它没有工作它创建这个 JSON { "{\"JObject\":": { "{\"key\":\"20\",\"value\": \"ddd\"},{\"key\":\"21\",\"value\":\"4,5,13,​​14,15,\"}]}": "" } } I我的 Web API 中仍然有字符 \ 并且没有格式化为反序列化的有效 JSON
    • 有趣的是,现在我得到了一个干净的 JSON,但有很多空格和换行
    • 这是错误的,这不是它发生的原因。这是因为创建的 JSON 字符串是:[{"key":"29","value":"Country"},{"key":"30","value":"4,3,5"}]。但是当您尝试将其发布到 php 时,您要发送的字符串被放置在另一个字符串中,分隔符为 "。这意味着您的字符串不能包含 ",因此 jquery 将它们转换为 \"
    【解决方案2】:
    const config = {a: 1, b: 2}
    console.log(JSON.stringify(JSON.stringify(config)))
    

    "{\"a\": 1, \"b\": 2}"

    【讨论】:

      【解决方案3】:

      可能你有一个旧的prototype 库。 当我删除它时,错误消失了

      【讨论】:

      猜你喜欢
      • 2015-10-09
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多