使用JSON.stringify向我的Json对象添加一个额外的\和“”

时间:2012-12-17 15:08:58

标签: javascript arrays json serialization deserialization

您好我正在使用Javascript创建一个带有键和值的对象数组,使用以下代码。

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

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

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

当我尝试对它进行字符串化并在帖子中发送JSON时,我正在使用错误的格式化JSON和\并且“在我不想要的地方,所以当我尝试使用C#来设置JSON作为代码隐藏时的JObject时我遇到了麻烦。如何使用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;

...

3 个答案:

答案 0 :(得分:19)

看起来您正在将字符串作为地图中的值。你应该做点什么:

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

正在发生的事情是你是对你的values数组进行双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)  { .. }});

请注意数据属性的更改。这是一个为您自动JSONified的值。

答案 1 :(得分:10)

你可能有一个旧的prototype库。 当我删除它时,bug已经消失

答案 2 :(得分:9)

const config = {a: 1, b: 2}
console.log(JSON.stringify(JSON.stringify(config)))

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