распарсить строку в JSON

158
15 февраля 2018, 16:47

К примеру есть строка вида

'test[test2][test3]'

Как с помощью javascript распарсить ее в JSON вида

{
    "test": {
        "test2": {
            "test3": null
        }
    }
}

?

При этом количество уровней может отличаться и заранее неизвестно.

Нашел пример на jQuery, хотелось бы на чистом js, к примеру 6 версии (или какая там сейчас актуальна)

Answer 1

Для решения, можно воспользоваться следующим подходом: получить все имена свойств в виде массива, свернуть получившийся массив в объект.

Для получения имен свойств можно использовать регулярное выражение и метод match

str.match(/\w+/g)

Данное выражение вернет массив названий в порядке следования:

["test", "test2", "test3"]

Далее этот массив можно свернуть с помощью функции reduceRight

Данная функции проходит массив начиная с последнего элемента.

Вызов может быть следующим:

.reduceRight((acc,cur)=>({[cur]:acc}),null)

В качестве начального значения указывается null, это будет значение самого вложенного элемента.

Сама функция возвращает объект с одним свойством, имя которого находится в параметре cur, в который передается текущий элемент массива, значением свойства устанавливается объект полученный на предыдущем шаге.

Пример:

console.log('test[test2][test3]' 
  .match(/\w+/g) 
  .reduceRight((acc, cur) => ({ 
    [cur]: acc 
  }), null));

READ ALSO
Анимация для Inner HTML (Anime.js или альтернативы)

Анимация для Inner HTML (Anime.js или альтернативы)

Мне нужно сделать калькулятор для рассчёта стоимости видеороликаЕсть такой код:

127
PHP TZD формат даты [QIWI API]

PHP TZD формат даты [QIWI API]

Здравствуйте, нужно получить историю платежей Киви, при помощи APIСделано все, кроме сортировки по времени, здесь я не могу понять

181