2016-08-01 2 views
-5

Мои данные в настоящее время хранится в этом формате, хранится в JSON файл:Преобразовать JSON объект, содержащий объекты в массив объектов

{ 
    "name": { 
     "0": ______, 
     "1": ______, 
     "2": ______ 
    }, 
    "xcoord": { 
     "0": ______, 
     "1": ______, 
     "2": ______ 
    }, 
    "ycoord": { 
     "0": ______, 
     "1": ______, 
     "2": ______ 
    } 
} 

И мне нужно, чтобы преобразовать его в этот формат, как массив объектов :

[ 
    { 
     "id": 0, 
     "name": _____, 
     "xcoord": _____, 
     "ycoord": _____ 
    }, 
    { 
     "id": 1, 
     "name": _____, 
     "xcoord": _____, 
     "ycoord": _____ 
    }, 
    { 
     "id": 2, 
     "name": _____, 
     "xcoord": _____, 
     "ycoord": _____ 
    } 
] 

Как вы можете видеть, я также необходимо принимать цифровые клавиши в моем первом формате данных и сделать их значение «ID» в моем втором формате данных. (Поскольку позиция объекта в массиве и номер идентификатора совпадают, возможно, это был бы другой способ создания ключа «id»?). Затем я сохранил бы свой второй формат данных в локальной переменной, используемой в моем JS-коде ,

Любые идеи о том, как я могу это сделать? Я не очень хорошо разбираюсь в таких данных.

+1

Создать массив, затем итерацию объект JSON и для каждой проверки суб-собственность, если есть уже элемент в массиве. Если не создать его. Затем добавьте родительское свойство со значением. – MarcoL

ответ

0

Это можно сделать, например, с двумя чешуйчатые .forEach():

var obj = { 
 
    "name": { 
 
     0: 'name0', 
 
     1: 'name1', 
 
     2: 'name2' 
 
    }, 
 
    "xcoord": { 
 
     0: 'xcoord0', 
 
     1: 'xcoord1', 
 
     2: 'xcoord2' 
 
    }, 
 
    "ycoord": { 
 
     0: 'ycoord0', 
 
     1: 'ycoord1', 
 
     2: 'ycoord2' 
 
    } 
 
}; 
 

 
var res = []; 
 

 
Object.keys(obj).forEach(k => { 
 
    Object.keys(obj[k]).forEach(v => { 
 
    (res[v] = (res[v] || { id: v }))[k] = obj[k][v]; 
 
    }); 
 
}); 
 

 
console.log(res);

Примечание:

Эта линия ...

(res[v] = (res[v] || { id: v }))[k] = obj[k][v] 

... короткий способ сделать:

if(!res[v]) { 
    // if this record doesn't exist yet, 
    // create it with its implied 'id' property 
    res[v] = { id: v }; 
} 
// add property 'k' to this record 
res[v][k] = obj[k][v]; 
Смежные вопросы