【问题标题】:Javascript array converted to JSON objects instead of arrayJavascript 数组转换为 JSON 对象而不是数组
【发布时间】:2011-07-11 16:26:18
【问题描述】:

我正在尝试向我的网络应用程序提交一些 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 Array 对象。我使用 jQuery 的 ajax 方法提交此文件,但不是将 javascript 数组显示为所需的 JSON 数组,而是将其转换为一系列 JSON 对象,如下所示:

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

如何让数组作为数组提交,而不是转换成一系列以数组索引为键的 JSON 对象?

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

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

EDIT#2:通过以下调用将“表单”发送到服务器:

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

【问题讨论】:

  • 请告诉我们listArray是什么,它是如何定义的?
  • ( 强制性 SO 巨魔响应 ) 没有 JSON 对象之类的东西,JSON 是符号规范。您正在创建 javascript 对象文字。
  • @jondavidjohn:实际上在这种情况下,术语是正确的。当然,在 JSON 中有可以称为 JSON 对象的对象。将 JS 对象称为 JSON 对象是错误的,但是如果您仔细阅读,OP 并没有这样做(尽管可以以更清晰的方式编写)。
  • @jondavidjohn - 不,我认为这里的 OP 实际上是在谈论 JSON - 问题在于 在 JSON 中创建的是对象表示,而不是数组。
  • @Felix Kling - 没有真正理解您的意思,JSON 是从 javascript 定义对象文字的方式派生的表示法标准,但在这种情况下 form是一个对象文字,而不是一个“JSON对象”......也许我错过了一些东西。

标签: javascript jquery ruby-on-rails json


【解决方案1】:

看看here。如果您真的想发布 JSON,您将需要发送字符串,而不是对象文字。您可以在form 上使用JSON.stringify (or a more supported JSON solution)。

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

【讨论】:

  • 我建议使用 jquery-json 插件,因为 JSON.stringify 在常用浏览器中参差不齐。
猜你喜欢
  • 2018-04-21
  • 1970-01-01
  • 2017-07-13
  • 2021-05-02
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
相关资源
最近更新 更多