JSON.stringify 向我的 Json 对象添加额外的 \ 和 "" 的问题

Posted

技术标签:

【中文标题】JSON.stringify 向我的 Json 对象添加额外的 \\ 和 "" 的问题【英文标题】: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;

...

【问题讨论】:

【参考方案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 库。 当我删除它时,错误消失了

【讨论】:

这是相关的:***.com/questions/710586/…

以上是关于JSON.stringify 向我的 Json 对象添加额外的 \ 和 "" 的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 fabricjs 对象上应用 JSON.stringify 后自定义属性丢失

JSON.stringify 和 JSON.parse 之间的区别

JS对json操作的扩展

JSON.stringify////////////////////////////////zzzzzzzzzzzzzz

JSON.parse()和JSON.stringify()的区别

如何在不获取空对象的情况下进行 JSON.stringify 和 JSON.parse?