Как структурировать объект, который включает объекты массива? - PullRequest
0 голосов
/ 05 июня 2018

Как манипулировать этим объектом с параметром запроса URL-адреса. Например, параметр запроса должен быть

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

Ответы [ 5 ]

0 голосов
/ 05 июня 2018

Вот код для преобразования любого 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);

Надеюсь, это решит вашу проблему.

0 голосов
/ 05 июня 2018

Этот алгоритм будет работать.С осторожностью, если вы измените структуру объекта, это может привести к поломке

Надеюсь, это поможет:>

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 +  '&';
0 голосов
/ 05 июня 2018

Может быть:

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);
0 голосов
/ 05 июня 2018

Вот пример, который я только что сделал: 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;
}
0 голосов
/ 05 июня 2018
  1. Вы можете попробовать Post Запрос
  2. Отправить строку JSON с помощью JSON.Parse () и JSON.stringify () Конвертировать вашмассив параметров в JSON String и отправить его в виде одного параметра запроса.Расшифруйте параметр строки запроса (то есть строку 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,% 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 "

Объект {stage: 50, категории: Array [25, 23, 28], адвокаты: Array [Object {key: "7195", метка: "kallol saikia"}], города: Массив [Объект {ключ: 390, метка: "Дели"}, Объект {ключ: 6, метка: "Мумбаи"}], поле-флажок: true, checkbox-active: true}

...