Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何对包含数组对象的对象进行字符串化?_Javascript_Reactjs_Query String - Fatal编程技术网

Javascript 如何对包含数组对象的对象进行字符串化?

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(即

如何将此对象操作为URL查询参数。查询参数的示例应为

properties=7195&categories=25&checkbox active=true&checkbox close=undefined&checkbox field=true&checkbox notfield=undefined&cities=德里&cities=孟买

  • 您可以尝试使用
    Post
    Request
  • 使用and发送JSON字符串 将参数数组转换为JSON字符串,并将其作为单个查询参数发送。 解码查询字符串param(即JSON字符串)
  • 添加示例

    var 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;iconsole.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;
    }