Javascript 有没有简单的方法将复杂的JS对象转换为查询参数?

Javascript 有没有简单的方法将复杂的JS对象转换为查询参数?,javascript,arrays,query-parameters,Javascript,Arrays,Query Parameters,我有一个嵌套数组的JS对象,以这个为例: { array: [ { name: 'test-1' }, { name: 'test-2' } ] simpleParam: 1, complexParam: { attribute: 2 } } 我需要将其转换为查询参数,因为我使用的API需要以以下格式读取它们: “数组[0]。name='test-1'和数组[1]。name='test-2'和

我有一个嵌套数组的JS对象,以这个为例:

{
   array: [
    {
        name: 'test-1'
    },
    {
        name: 'test-2'
    }
   ]
   simpleParam: 1,
   complexParam: {
    attribute: 2
   }
}
我需要将其转换为查询参数,因为我使用的API需要以以下格式读取它们:

“数组[0]。name='test-1'和数组[1]。name='test-2'和simpleParam=1&complexParam.attribute=2”

我想知道是否有一种简单的方法可以做到这一点,比如JSON.stringify(),在这种情况下,它不适合我的需要,或者我是否需要编写自己的通用算法来完成此转换

编辑
我想使用纯JS,需要注意的是,在我想要格式化的对象中有数组

您可以使用
jQuery.param()
decodeURI()
这样做,希望输出就是您想要的

var myObj = {
   array: [
    {
        name: 'test-1'
    },
    {
        name: 'test-2'
    }
   ],
   simpleParam: 1,
   complexParam: {
    attribute: 2
   }
};

console.log(decodeURI($.param(myObj)));
// array[0][name]=test-1&array[1][name]=test-2&simpleParam=1&complexParam[attribute]=2

您可以使用
jQuery.param()
decodeURI()
这样做,希望输出就是您想要的

var myObj = {
   array: [
    {
        name: 'test-1'
    },
    {
        name: 'test-2'
    }
   ],
   simpleParam: 1,
   complexParam: {
    attribute: 2
   }
};

console.log(decodeURI($.param(myObj)));
// array[0][name]=test-1&array[1][name]=test-2&simpleParam=1&complexParam[attribute]=2
这是我为其他东西写的一篇文章:

var数据={
数组:[{
名称:“测试-1”
},
{
名称:“测试-2”
}
],
simpleParam:1,
复杂参数:{
属性:2
}
};
var urlstring=stringifyObject(数据);
console.log(urlstring);
log(decodeURIComponent(urlstring));
/**
*如果提供了一个对象,它会将其转换为查询字符串
*@param要转换的数据对象
*@返回查询字符串
*/
函数字符串化对象(数据){
var值,键,tmp=[];
const encodeFunc=data=>encodeURIComponent(“”+data)。替换(/!/g,“%21”)
.replace(/'/g,'%27')。replace(/\(/g,'%28')。replace(/\)/g,'%29'))
.替换(/\*/g,'%2A')。替换(/%20/g,'+');
常量hbqHelper=(键,val)=>{
var k,tmp=[];
如果(val==true)val='1';
如果(val==false)val='0',则为else;
如果(val!==null){
if(typeof val=='object'){
对于(k in val)
如果(val[k]!==null)
tmp.push(_hbqHelper(key+'['+k+']',val[k],'&');
返回tmp.join('&');
}else if(typeof val!=='function')返回encodeFunc(键)+'='+encodeFunc(val);
否则返回false;
}否则返回“”;
};
用于(输入数据){
值=数据[键];
var查询=_hbqHelper(键,值,&');
如果(查询===false)继续;
如果(查询!='')tmp.push(查询)
}
返回tmp.join('&');
}
这是我为其他东西写的一篇文章:

var数据={
数组:[{
名称:“测试-1”
},
{
名称:“测试-2”
}
],
simpleParam:1,
复杂参数:{
属性:2
}
};
var urlstring=stringifyObject(数据);
console.log(urlstring);
log(decodeURIComponent(urlstring));
/**
*如果提供了一个对象,它会将其转换为查询字符串
*@param要转换的数据对象
*@返回查询字符串
*/
函数字符串化对象(数据){
var值,键,tmp=[];
const encodeFunc=data=>encodeURIComponent(“”+data)。替换(/!/g,“%21”)
.replace(/'/g,'%27')。replace(/\(/g,'%28')。replace(/\)/g,'%29'))
.替换(/\*/g,'%2A')。替换(/%20/g,'+');
常量hbqHelper=(键,val)=>{
var k,tmp=[];
如果(val==true)val='1';
如果(val==false)val='0',则为else;
如果(val!==null){
if(typeof val=='object'){
对于(k in val)
如果(val[k]!==null)
tmp.push(_hbqHelper(key+'['+k+']',val[k],'&');
返回tmp.join('&');
}else if(typeof val!=='function')返回encodeFunc(键)+'='+encodeFunc(val);
否则返回false;
}否则返回“”;
};
用于(输入数据){
值=数据[键];
var查询=_hbqHelper(键,值,&');
如果(查询===false)继续;
如果(查询!='')tmp.push(查询)
}
返回tmp.join('&');

}
您可能可以使用某种类型的库来压缩它。但是没有内置的通用方法来做你想做的事情。我知道这很挑剔,但那不是JSON。你是说“javascript对象”吗?JSON总是一个字符串。你有一个JS对象文字,而不是JSON。可能是@evolutionxbox的重复。你是对的,我编辑了这个问题。你可能可以使用某种库来压缩它。但是没有内置的通用方法来做你想做的事情。我知道这很挑剔,但那不是JSON。你是说“javascript对象”吗?JSON总是一个字符串。你有一个JS对象文字,而不是JSON。可能是@evolutionxbox的重复。你是对的,我编辑了这个问题。如果它是重复的,你应该这样标记它。我编辑它是为了强调对象中有数组的事实,因此,重复的答案并不完全适用,尽管它们确实相似。对于未标记为jquery的问题,不提供jquery答案。如果是重复的,则应将其标记为重复。我对其进行了编辑,以强调对象中存在数组这一事实,因此,重复的答案并不完全适用,尽管它们确实是相似的。对于没有标记为jquery的问题,它们不提供jquery答案。