2011-07-11 46 views
3

我想提出一些JSON到我的web应用程序,我想JSON是这样的:Javascript数组转换成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方法,但提交的,而不是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 */ 
    } 
}); 
+1

请告诉我们'listArray'是什么,它是如何定义的? –

+4

(*强制SO巨魔响应*)没有这样的东西作为JSON对象,JSON是符号规范。您正在创建JavaScript对象文字。 – jondavidjohn

+2

@jondavidjohn:实际上在这种情况下,术语是正确的。当然,在JSON中有可以称为JSON对象的对象。将JS对象称为JSON对象是错误的,但是如果仔细阅读,那么OP不会那么做(尽管它可以用更清晰的方式书写)。 –

回答

3

看一看here。如果你真的想发布JSON,你需要发送字符串,而不是对象字面值。您可以在form上使用JSON.stringifyor a more supported JSON solution)。

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

我会推荐使用jquery-json插件,因为JSON.stringify在常用的浏览器中很常见。 –

+0

好点,我会用链接更新答案。 –