用JSON表示查询字符串

时间:2009-01-15 19:36:35

标签: javascript json query-string

我有这个Javascript数据:

[{id:123,type:"test"},{id:154,type:"another"}]

您如何将其转换为某些内容,以便将其作为HTTP post请求传递?

menu[0][id] = 123
menu[0][type] = test
menu[1][id] = 154
menu[1][type] = another

我不想传递实际的JSON数据,我想清理它并将其作为格式化的HTTP参数传递。

修改

能够使用类似的东西解析客户端上的对象,也许你们在我将其签名为“已回答”之前会建议更好的东西吗?

this.serialize = function(elem) {
    var childs = elem.childElements();
    var str = "";
    for(var i=0, item; i<childs.length; i++) {
        item = childs[i];
        str += ((i)?"&":"")+"menu[" + i +"][id]=" + item.id.replace(/item_/,"");
        str += "&menu[" + i +"][type]=" + item.className;
        str += "&menu[" + i +"][section]=" + elem.id;
        str += "&menu[" + i +"][position]=" + i;
    }
    return str;
}

4 个答案:

答案 0 :(得分:3)

var data = [{id:123,type:"test"},{id:154,type:"another"}];
var params = new Array();
for(var x = 0; x < data.length; x++) {
    params.push("id=[" + x + "]=" + escape(data[x].id));
    params.push("type=[" + x + "]=" + escape(data[x].type));
}
alert(params.join("&")); // output: id=[0]=123&type=[0]=test&id=[1]=154&type=[1]=another

这就是你想要的吗?

答案 1 :(得分:0)

"?qsparam=" + escape("[{id:123,type:'test'},{id:154,type:'another'},...]")

答案 2 :(得分:0)

menu0.id = 123&安培; menu0.type =试验&安培; menu1.id = 154安培; menu1.type =另一

这很容易在服务器上解析,因为它是常规格式。

答案 3 :(得分:0)

我相信HTTP POST只接受一个扁平的键/值集合,而不是任何任意的JavaScript数据结构。

如果您可以展平它(例如,像John Stauffer所示),如果您要发布到自己的域名,则可以使用XMLHttpRequest发布并通过键/值集合,格式类似于查询字符串,使用.send(data)方法。

如果您不想自己实现它,大多数JavaScript库都应该有一个实现(例如jQuery.post)。