我有一个带有嵌套数组的JS对象,以这个为例:
{
array: [
{
name: 'test-1'
},
{
name: 'test-2'
}
]
simpleParam: 1,
complexParam: {
attribute: 2
}
}
我需要将其转换为查询参数,因为我正在使用的API需要以以下格式读取它们:
“ array [0] .name ='test-1'&array [1] .name ='test-2'&simpleParam = 1&complexParam.attribute = 2”
我想知道是否有像JSON.stringify()这样的简单方法可以满足我的需要,或者我是否需要编写自己的通用算法来进行这种转换。 / p>
编辑 我想使用普通的JS,请务必注意,我要格式化的对象中有数组
答案 0 :(得分:1)
这是我写的class的另一篇文章:
var data = {
array: [{
name: 'test-1'
},
{
name: 'test-2'
}
],
simpleParam: 1,
complexParam: {
attribute: 2
}
};
var urlstring = stringifyObject(data);
console.log(urlstring);
console.log(decodeURIComponent(urlstring));
/**
* Provided an object, it will convert it to a query string
* @param data object to convert
* @returns query string
*/
function stringifyObject(data) {
var value, key, tmp = [];
const encodeFunc = data => encodeURIComponent('' + data).replace(/!/g, '%21')
.replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29')
.replace(/\*/g, '%2A').replace(/%20/g, '+');
const _hbqHelper = (key, val) => {
var k, tmp = [];
if (val === true) val = '1';
else if (val === false) val = '0';
if (val !== null) {
if (typeof val === 'object') {
for (k in val)
if (val[k] !== null)
tmp.push(_hbqHelper(key + '[' + k + ']', val[k], '&'));
return tmp.join('&');
} else if (typeof val !== 'function') return encodeFunc(key) + '=' + encodeFunc(val);
else return false;
} else return '';
};
for (key in data) {
value = data[key];
var query = _hbqHelper(key, value, '&');
if (query === false) continue;
if (query !== '') tmp.push(query)
}
return tmp.join('&');
}
答案 1 :(得分:0)
您可以使用/foo
和jQuery.param()
来做到这一点,希望输出是您想要的。
decodeURI()