Javascript 用JSON表示查询字符串

Javascript 用JSON表示查询字符串,javascript,json,query-string,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参数传递 编辑 能够在客户端使用类似这样的东西解析对象,也许你们会在我将其签

我有以下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=函数(elem){
var childs=elem.childElements();
var str=“”;

对于(变量i=0,项;imenu0.id=123&menu0.type=test&menu1.id=154&menu1.type=other


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

menu0.id=123&menu0.type=test&menu1.id=154&menu1.type=other


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

我相信HTTPPOST只接受一个简单的键/值集合,而不接受任何任意的JavaScript数据结构

如果可以将其展平(例如,如John Stauffer所示),并且如果要发布到自己的域,则可以使用
XMLHttpRequest
发布并传递键/值集合,其格式类似于查询字符串


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

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

如果可以将其展平(例如,如John Stauffer所示),并且如果要发布到自己的域,则可以使用
XMLHttpRequest
发布并传递键/值集合,其格式类似于查询字符串

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

var data=[{id:123,键入:“test”},{id:154,键入:“other”}];
var params=新数组();
对于(var x=0;x
这就是你想要的吗?

var数据=[{id:123,键入:“test”},{id:154,键入:“另一个”}];
var params=新数组();
对于(var x=0;x

这就是你想要的吗?

你可能没有理解我的问题,无论如何,这是错误的,我不想传递实际的JSON数据,我想清理它并将其作为格式化的HTTP参数传递。你可能没有理解我的问题,无论如何,这是错误的,我不想传递实际的JSON数据,我想清理它,然后p将其命名为格式化的HTTP参数。您是在寻找查询参数必须采用的语法吗?您是在寻找查询参数必须采用的语法吗?哦,很好,谢谢,与我的解决方案类似,我会将您标记为ask fixed。小心,您不应该使用for(obj中的x)迭代javascript数组…我相信它在IE中会中断,使用for(var I=0…);它不是只有在人们弄乱原型时才会中断吗?我知道如果加载了“原型”库,它就会中断。@LucaMatteis内部属性也会被迭代,如果Object.prototype上有任何垫片,这也是一个问题。您可以添加Object.hasOwnProperty(实例)作为这两种情况的合理性检查。哦,很好,谢谢,与我的解决方案类似,我将标记您为ask fixed。小心,您不应该使用for(obj中的x)迭代javascript数组…我相信它在IE中会断开,使用for(var I=0…);它不是只有在人们弄乱原型时才会断开吗?我知道如果“原型”会断开库已加载。@LucaMatteis内部属性也会被迭代,如果Object.prototype上有任何垫片,这也是一个问题。您可以添加Object.hasOwnProperty(实例)作为任何情况的健全性检查。
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;
}
"?qsparam=" + escape("[{id:123,type:'test'},{id:154,type:'another'},...]")
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