2017-10-08 18 views
0

Je dispose d'un fichier JSON qui ressemble à ceci:Réorganiser fichier JSON (en utilisant la matrice de contiguïté)

[ 
    { 
    "id": 1, 
    "country": "Greece", 
    "names": [ 
     "Alex", 
     "Betty", 
     "Catherine", 
     "Dave", 
     "Edward", 
     "Frank", 
     "George", 
     "Helen", 
     "Irene" 
    ] 
    }, 
    { 
    "id": 2, 
    "country": "US", 
    "names": [ 
     "John", 
     "Alex", 
     "Edward", 
     "Kate", 
     "Robert", 
     "Irene", 
     "Tim", 
     "Sam" 
    ] 
    }, 
    { 
    "id": 3, 
    "country": "France", 
    "names": [ 
     "Helen", 
     "Kate", 
     "Louise", 
     "Tim", 
     "Catherine", 
     "Arthur", 
     "Frank", 
     "Natalie", 
     "Dave" 
    ] 
    }, 
    { 
    "id": 4, 
    "country": "India", 
    "names": [ 
     "Ritesh", 
     "Alex", 
     "Betty", 
     "Robert" 
    ] 
    }, 
    { 
    "id": 5, 
    "country": "India", 
    "names": [ 
     "Nafeez", 
     "Tom", 
     "Natalie", 
     "Gunar", 
     "Louise", 
     "Arthur" 
    ] 
    } 
] 

Je veux que ce soit « nom centré » et ressemble à ceci:

{ 
"groups": [  
    { 
    "gr_id":1 
    "name":"Alex", 
    "country":"Greece" 
    }, 
    ......... 
    { 
    "gr_id":1 
    "name":"Irene", 
    "country":"Greece" 
    }, 


    { 
    "gr_id":2 
    "name":"John", 
    "country":"US" 
    .......... 
    { 
    "gr_id":2 
    "name":"Sam", 
    "country":"US" 
    }, 


    { 
    "gr_id":3 
    "name":"Helen", 
    "country":"France" 
    }, 
    ......... 
    { 
    "gr_id":3 
    "name":"Dave", 
    "country":"France" 
    }, 


    { 
    "gr_id":4 
    "name":"Ritesh", 
    "country":"India" 
    }, 
    ........ 
    { 
    "gr_id":4 
    "name":"Robert", 
    "country":"India" 
    }, 

    { 
    "gr_id":5 
    "name":"Nafeez", 
    "country":"India" 
    }, 
    ........... 
    { 
    "gr_id":5 
    "name":"Arthur", 
    "country":"India" 
    } 
     ], 
"links": [  
    { 
    "source":"Alex" 
    "target":"Irene", 
    "count":1 
    "country":"Greece" 
    }, 
    ... 
    { 
    "source":"Alex" 
    "target":"Arthur", 
    "count":0 
    "country":"India" 
    }, 
    ... 
     ] 
} 

pour count dans Links J'ai une matrice de contiguïté pour chaque pays/nom (format csv) comme ceci: screenshot of csv file (ad. matrix for India)

ce JSON est juste un exemple. J'ai beaucoup plus gros fichier (j'en ai besoin pour la visualisation graphique D3)

+0

Je finis en utilisant ceci: graphique = graph_r.nodes.reduce ( (acc, Curr) => acc.concat ( curr.name.map (item => ({ gr_id: curr.id, pays: curr.country, nom : article })) ), [] ); – user8734221

Répondre

1

Reduce() et map() fonctionnent parfaitement pour cela. Cela prend essentiellement chaque élément et des cartes sur les noms, les résultats de annexant map() à un tableau:

let obj = {} 
obj.groups = json.reduce(
    (acc, curr) => acc.concat(curr.names.map(
    item => ({gr_id: curr.id, country: curr.country, name: item}) 
    )), []) 

console.log(obj) 

// { groups: 
// [ { gr_id: 1, country: 'Greece', name: 'Alex' }, 
//  { gr_id: 1, country: 'Greece', name: 'Betty' }, 
//  ...etc 
//  ] 
// }