Как преобразовать объект js в строку get запроса?

Т.е. на входе имею
var queryObject = {
		grouop1: {
			VAR1: 'val1',
			VAR2: 'val2',
			subgroup1: {
				VAR3: 'val3',
				VAR4: 'val4',
			}
		},
		grouop2: {
			VAR5: 'val5',
			VAR6: 'val6'
		},
		VAR7: 'val7'
	};


на выходе хочу получить:
grouop1[VAR1]=val1&grouop1[VAR2]=val2&grouop1[subgroup1][VAR3]=val3&grouop1[subgroup1][VAR4]=val4&grouop2[VAR5]=val5&grouop2[VAR6]=val6&VAR7=val7


Как добиться?

UPD:
Этот запрос нужен не для отправки на сервер, на сервер и так все уже улетает как надо - запрос нужен чтобы добавить его в URL браузера, чтобы дать возможность пользователю скопировать URL состояния и для того чтобы, он мог перемещаться по истории.

https://habr.com/ru/post/232073/ - эту статью видел. Во-первых там способ сам по себе плохо реализован, во-вторых он неработоспособный - работает только с "плоскими" объектами. Хотя сейчас я именно его и использую "кодируя" объект в "плоский", т.е. у меня сейчас gropu1[VAR1] кодируется как group1:VAR1 и это я уже разбираю на бэке.
  • Вопрос задан
  • 1723 просмотра
Решения вопроса 2
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
можно просто сделать урленкод и передать весь жсон как строку, будет гораздо проще.
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
const getQueryArray = (obj, path = [], result = []) =>
  Object.entries(obj).reduce((acc, [ k, v ]) => {
    path.push(k);

    if (v instanceof Object) {
      getQueryArray(v, path, acc);
    } else {
      acc.push(`${path.map((n, i) => i ? `[${n}]` : n).join('')}=${v}`);
    }

    path.pop();

    return acc;
  }, result);

const getQueryString = obj => getQueryArray(obj).join('&');


const queryString = getQueryString(queryObject);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы