Преобразовать 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, время: 09:25. |