Задать вопрос
@kachurinets

Как сериализовать вложенный объект?

Хочу перевести вложенный объект в строку, для отправки на бекенд.
https://jsfiddle.net/rwcjapft/

Есть такой объект:

let obj = {
  page: "1",
  search: {title: "gfsg", without_complex: false},
  size: "10",
  items: 323
}

На выходе нужно получить:

page=1&search[title]=gfsg&search[without_complex]=false&size=10&items=323

Как?
  • Вопрос задан
  • 140 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Рекурсия есть:

const serialize = (obj, path) => Object
  .entries(obj)
  .map(([ k, v ]) => {
    const p = path ? `${path}[${k}]` : k;
    return v instanceof Object ? serialize(v, p) : `${p}=${v}`;
  })
  .join('&');

Рекурсии нет:

function serialize(obj) {
  const result = [];

  for (const stack = [ [ obj, '' ] ]; stack.length;) {
    const [ n, path ] = stack.pop();
    if (n === Object(n)) {
      stack.push(...Object
        .keys(n)
        .map(k => [ n[k], path ? `${path}[${k}]` : k ])
        .reverse()
      );
    } else {
      result.push(`${path}=${n}`);
    }
  }

  return result.join('&');
}
Ответ написан
Комментировать
Ni55aN
@Ni55aN
Для этого есть уже готовое решение: https://github.com/ljharb/qs
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы