Преобразовать JSON объект в объект с массивами
Всем привет!
Помогите решить такую задачку. Имеем JSON такого вида: { "0": { "event": { "data": "Города", "citys": { "0": "Москва", "1": "Дон", }, } }, "1": { "event": { "data": "Города", "citys": { "0": "Москва", "1": "Дон", }, } }, } Как видно "0", "1" и тд. это объекты, но на самом деле они должны быть массивами. Понятно что можно общий объект преобразовать в массив, затем "citys" преобразовать в массив. Но проблема в том, что данных много и вложений объектов в объекте также много. Как бы сделать так чтобы проверялись объекты и вложенные в них объекты на существование имен "0", "1" и преобразовывать их в массивы. |
tk.stas, правильный ответ: генерировать сразу по-человечески.
|
tk.stas,
подожду переводчика, но возможно вам нужно Object.values() |
рони, нет, ему надо это):
function fixArraysRecursive(value) { if( // проверяем что объект typeof value === 'object' // проверяем что простой объект, а не какой-нить Date && Object.prototype.toString.call(value) === '[object Object]' ){ // получаем ключи объекта const keys = Object.keys(value); // проверяем что есть ключ 0 const isArray = 0 in value // если да - что все ключи числа && keys.every(key => key === parseInt(key, 10).toString()) // если да - что нет пропусков && keys .map(Number) .sort((a, b) => a - b) .every((key, index) => key === index); const target = isArray ? Array(keys.length) : {...value}; keys.forEach((key, i) => target[key] = fixArraysRecursive(value[key])); return target; } return value; } |
Aetae,
:) :thanks: |
Aetae, к сожалению такие данные приходят с сервера.
Спасибо за код. |
Часовой пояс GMT +3, время: 07:17. |