如何将包含数组对象的对象字符串化?

How to stringify an Object which includes objects of array?

如何操作此对象以 URL 查询 parameter.The 例如,查询参数应为

advocates=7195&categories=25&checkbox-active=true&checkbox-close=undefined&checkbox-filed=true&checkbox-notFiled=undefined&cities=Delhi&cities=mumbai

  1. 您可以尝试使用 Post 请求
  2. 使用 JSON.Parse() and JSON.stringify() 发送 JSON 字符串 将您的参数数组转换为 JSON 字符串并将其作为单个查询参数发送。 解码查询字符串参数(即 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);

Output "%7B%22stage%22:50,%22categories%22:%5B25,23,28%5D,%22advocates%22:%5B%7B%22key%22:%227195%22,%22label%22:%22kallol%20saikia%22%7D%5D,%22cities%22:%5B%7B%22key%22:390,%22label%22:%22Delhi%22%7D,%7B%22key%22:6,%22label%22:%22Mumbai%22%7D%5D,%22checkbox-filed%22:true,%22checkbox-active%22:true%7D"

Object { stage: 50, categories: Array [25, 23, 28], advocates: Array [Object { key: "7195", label: "kallol saikia" }], cities: Array [Object { key: 390, label: "Delhi" }, Object { key: 6, label: "Mumbai" }], checkbox-filed: true, checkbox-active: true }

也许:

var o = {
  'advocates': [{
    key: 1
  }],
  'checkbox-active': true
};

var query = Object.keys(o).map(function(i) {
  var val;
  if (Array.isArray(o[i])) {
    val = o[i][0].key;
  } else {
    val = o[i];
  }
  return i + '=' + val;
}).join('&');

console.log(query);

这是我刚刚做的一个例子:https://jsfiddle.net/BrandonQDixon/surwf7gd

下面的脚本将遍历对象的键并将它们转换为 GET 样式参数,这就是您的请求的样子。我把它变成了一个函数,所以你可以直接在对象上调用它。

如果您的对象具有嵌套对象,这也将递归工作,但请理解,如果嵌套对象具有一些相同的键(或者通常有重复键),它们都会被添加到字符串中。

/**
  * 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;
}

这个算法会起作用。请谨慎,如果您更改对象结构,这可能会中断

希望对您有所帮助 :>

var obj = {
  "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
}


let str = 'advocates=' + obj.advocates[0].key +
          '&categories=' + obj.categories[0] + 
          'checkbox-active=' + obj['checkbox-active'] + 
          'checkbox-close=' + obj['checkbox-close'] + 
          'checkbox-filed=' + obj['checkbox-filed'] + 
          'checkbox-notFiled=' + obj['checkbox-notFiled'];

obj.cities.forEach(city=>str+= 'cities=' + city.label + '&')
str = str.substring(0,str.length-1)      
console.log(str)

 
advocates=7195&
categories=25&
checkbox-active=true&
checkbox-close=undefined&
checkbox-filed=true&
checkbox-notFiled=undefined&
cities=Delhi&
cities=mumbai


`${key}${i>0?'&':''}${val[0]}=${val[1]}`, ""
    'advocates':
     'checkbox-active':
     'checkbox-close':
     'checkbox-filed':
     'checkbox-notFiled':
      arrStr += key[0] + '=';
      arrStr += key[1][0].key +  '&';

这里是将任何 json 转换为查询参数的代码,无论它有多深:

var o = {
  "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
}

function getParams(key, value) {
  var queries = [];
  var newKey;

  if (Array.isArray(value)) {
    for (var i = 0; i < value.length; i++) {
      newKey = key + "[" + i + "]";
      queries = queries.concat(getParams(newKey, value[i]));
    }
  } else if (value && typeof value === 'object' && value.constructor === Object) {
    for (var prop in value) {
      if (value.hasOwnProperty(prop)) {
        newKey = key ? key + "[" + prop + "]" : prop;
        queries = queries.concat(getParams(newKey, value[prop]));
      }
    }
  } else {
    queries.push(key + "=" + value);
  }

  return queries;
}

var query = getParams("", o).join("&");
console.log(query);

希望这能解决您的问题。