Javascript 如何对包含数组对象的对象进行字符串化?
如何将此对象操作为URL查询参数。查询参数的示例应为Javascript 如何对包含数组对象的对象进行字符串化?,javascript,reactjs,query-string,Javascript,Reactjs,Query String,如何将此对象操作为URL查询参数。查询参数的示例应为 properties=7195&categories=25&checkbox active=true&checkbox close=undefined&checkbox field=true&checkbox notfield=undefined&cities=德里&cities=孟买 您可以尝试使用PostRequest 使用and发送JSON字符串 将参数数组转换为JSON字符串,并将其作为单个查询参数发送。 解码查询字符串param(即
properties=7195&categories=25&checkbox active=true&checkbox close=undefined&checkbox field=true&checkbox notfield=undefined&cities=德里&cities=孟买
Post
Requestvar jsonString = JSON.stringify({
"stage": 50,
"categories": [25, 23, 28],
"advocates": [{
"key": "7195",
"label": "kallol saikia"
}],
"cities": [{
"key": 390,
"label": "Delhi"
}, {
"key": 6,
"label": "Mumbai"
}],
"checkbox-filed": true,
"checkbox-active": true
});
// Pass down the Encoded Json
var encodedJson = encodeURI(jsonString);
console.log(encodedJson);
// Decode Json
var decodedJson = decodeURI(encodedJson);
var decodedObject = JSON.parse(decodedJson);
console.log(decodedObject);
输出
%7B%22stage%22:50,%22categories%22:%5B25,23,28%5D,%22advorites%22:%5B%7B%22key%22:%227195%22,%22label%22:%22kallol%20saikia%22%7D%5D,%22cities%22:%5B%7B%22key%22:390,%22label%22:%22德里%22%7D,%7B%22key%22%22:6,%22label%22:%22%22%22%22%22%22%22%22%7D%22%22%22%22%22%22%22%22%22%22%d,%22%22%22%22%22%22%22%22%22%22
对象{stage:50,类别:数组[25,23,28],拥护者:数组[Object{key:7195,label:kallol saikia}],城市:数组[Object{key:390,label:drish},对象{key:6,label:Mumbai}],复选框字段:true,复选框活动:true}
也许:
下面是我刚刚举的一个例子: 下面的脚本将循环遍历对象的键,并将它们转换为样式参数,这就是您的请求。我把它做成一个函数,这样你就可以直接在一个对象上调用它 如果您的对象具有嵌套对象,这也将递归地工作,但是要了解,如果嵌套对象具有一些相同的键(或者通常存在重复键),它们都将添加到字符串中
/**
* This will turn an object into a GET style parameter
* This scans recursively if 2nd param is set to true, but "flattens" every property into one string, so this may cause some overriding
* This will encode the keys and values if 3rd param is set to true
*/
function paramatize(obj,recursive = true,encode = true) {
let str = "";
let len = Object.keys(obj).length
let i = 0;
for (let key in obj) {
i++;
if (typeof obj[key] === 'object' && recursive) {
str += paramatize(obj[key]);
} else {
let nKey = (encode)?encodeURIComponent(key):key;
let nValue = (encode)?encodeURIComponent(obj[key]):obj[key];
str += nKey+"="+nValue;
}
if (i < len) {
str += "&";
}
}
return str;
}
/**
*这将把一个对象变成一个GET样式参数
*如果第二个参数设置为true,则会递归扫描,但会将每个属性“展平”为一个字符串,因此这可能会导致某些重写
*如果3rd param设置为true,则这将对键和值进行编码
*/
函数参数化(obj,递归=真,编码=真){
设str=“”;
设len=Object.keys(obj.length)
设i=0;
用于(输入obj){
i++;
if(对象的类型[键]='object'&递归){
str+=参数化(obj[key]);
}否则{
设nKey=(encode)?encodeURIComponent(key):key;
设nValue=(encode)?encodeURIComponent(obj[key]):obj[key];
str+=nKey+“=”+N值;
}
如果(i
此算法将起作用。请注意,如果更改对象结构,这可能会中断
希望这有帮助:>
var obj={
“阶段”:50,
“类别”:[25,23,28],
“倡导者”:[{
“密钥”:“7195”,
“标签”:“kallol saikia”
}],
“城市”:[{
“钥匙”:390,
“标签”:“德里”
}, {
“关键”:6,
“标签”:“孟买”
}],
“复选框已存档”:true,
“复选框处于活动状态”:true
}
让str='properties='+obj.properties[0]。键+
“&categories=”+obj.categories[0]+
“活动复选框=”+obj[“活动复选框”]+
'复选框关闭='+obj['checkbox-close']+
“checkbox-field=”+obj[“checkbox-field”]+
“复选框未归档=”+obj[“复选框未归档”];
obj.cities.forEach(city=>str+='cities='+city.label+'&'))
str=str.substring(0,str.length-1)
console.log(str)
倡导者=7195&
类别=25&
复选框active=true&
复选框关闭=未定义&
复选框field=true&
复选框notfield=未定义&
城市=德里&
城市=孟买
`${key}${i>0?'&':“}${val[0]}=${val[1]}',”
“倡导者”:
“复选框处于活动状态”:
“复选框关闭”:
“已存档的复选框”:
“复选框未归档”:
arrStr+=键[0]+'=';
arrStr+=键[1][0]。键+'&'代码>以下是将任何json转换为查询参数的代码,不管它有多深:
var o={
“阶段”:50,
“类别”:[25,23,28],
“倡导者”:[{
“密钥”:“7195”,
“标签”:“kallol saikia”
}],
“城市”:[{
“钥匙”:390,
“标签”:“德里”
}, {
“关键”:6,
“标签”:“孟买”
}],
“复选框已存档”:true,
“复选框处于活动状态”:true
}
函数getParams(键、值){
var查询=[];
var newKey;
if(数组.isArray(值)){
对于(变量i=0;i console.log(查询)代码>您可以添加一个对象的示例吗?您应该使用POST请求类型。将请求类型设置为“application/json”,并将json对象作为请求主体负载发送,而不是在url中发送数据。您可以使用foreach循环遍历对象的每个值,并将其全部转换为字符串。如果你知道js,你就知道如何自己构建它。你不能两次声明citites
,使用逗号分隔符来定义更多的值或类似的东西这是对象{“stage”:50,“categories”:[25,23,28],“advorites”:[{“key”:“7195”,“label”:“kallol saikia”}],“cities”:[{“key”:390,“label”:“德里”},{“键”:6,“标签”:“孟买”}],“复选框存档”:真,“复选框激活”:真}检查这个答案:你能给我举个例子吗?我只想要一个函数,它将这些数据作为URL参数返回,如下所示properties=7195&categories=25&checkbox-active=true&checkbox-close=undefined&checkbox-field=true&checkbox-notfield=undefined&cities=德里&cities=孟买
添加了这个示例
/**
* This will turn an object into a GET style parameter
* This scans recursively if 2nd param is set to true, but "flattens" every property into one string, so this may cause some overriding
* This will encode the keys and values if 3rd param is set to true
*/
function paramatize(obj,recursive = true,encode = true) {
let str = "";
let len = Object.keys(obj).length
let i = 0;
for (let key in obj) {
i++;
if (typeof obj[key] === 'object' && recursive) {
str += paramatize(obj[key]);
} else {
let nKey = (encode)?encodeURIComponent(key):key;
let nValue = (encode)?encodeURIComponent(obj[key]):obj[key];
str += nKey+"="+nValue;
}
if (i < len) {
str += "&";
}
}
return str;
}