JavaScript数组转换为JSON对象而不是数组

3
我将尝试向我的网络应用程序提交一些JSON,并且我希望JSON如下所示:
{ 
  "thing1" : 
  {
    "something" : "hello"
  },

  "list_of_things" :
  [
   {
     "item1" : "hello"
   },
   {
     "item2" : "hello"
   }
  ]
}

这里我有一个JSON对象和一个包含JSON对象的JSON数组。当我在JavaScript中创建要提交的数据时,我执行以下操作:

form = {
  "thing1" : {
    "something" : somethingVariable
  },
  "list_of_things" : listArray
}

这里的'listArray'是一个JavaScript散列对象的JavaScript数组对象。我使用jQuery的ajax方法提交它,但是它不会像期望的JSON数组那样显示JavaScript数组,而是将其转换为一系列JSON对象,如下所示:

{ "1" : { "thing1" : "something" }, "2" : { "thing2" : "something" }...

如何使数组作为一个数组被提交,而不是将其转换为具有数组索引键的一系列JSON对象?

编辑#1:'listArray'是一个简单的Javascript数组,定义如下:

var listArray = new Array();
listArray.push({ "thing1" : "something" });
listArray.push({ "thing2" : "something" });

编辑#2:使用以下调用将“form”发送到服务器:

$.ajax({
  type: 'POST',
  url: '/url',
  dataType: "json",
  data: form,
  success: function(data) {
    /* success code here */
  }
});

1
请展示一下 listArray 是什么,它是如何定义的? - Felix Kling
4
"JSON object" 并不存在,JSON 是一种符号规范。您正在创建的是 JavaScript 对象字面量。 - jondavidjohn
2
@jondavidjohn:实际上,在这个上下文中术语是正确的。当然,在JSON中有可以称为JSON对象的对象。只是将JS对象称为JSON对象是错误的,但如果你仔细阅读,那么OP并没有这样做(尽管它可以以更清晰的方式写出)。 - Felix Kling
1
@jondavidjohn - 不,我认为这里的OP实际上是在谈论JSON——问题在于在JSON中创建的是对象表示,而不是数组。 - nrabinowitz
1
@Felix Kling - 我不太明白你的意思,JSON是一种标记规范,它是从JavaScript定义对象字面量的方式中派生出来的,但在这种情况下,form是一个对象字面量,而不是“JSON对象”...也许我漏掉了什么。 - jondavidjohn
显示剩余10条评论
1个回答

3

请看这里。如果您真的想要发布JSON,您需要发送字符串,而不是对象文字。您可以在form上使用JSON.stringify或更受支持的JSON解决方案)。

$.ajax({
    url: "/url",,
    dataType: "json",
    type: "POST",
    processData: false,
    contentType: "application/json",
    data: JSON.stringify(form)
});

我建议使用jquery-json插件,因为JSON.stringify在常用浏览器中存在问题。 - Jamie Treworgy

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