2 votes

Besoin de déplacer les nœuds enfants dans le json vers le nœud parent

J'ai le JSON suivant -

[{ 
 "ctin":"guju3j3jgjh3b",
 "inv":[ 
  { 
     "inum":"OS1920/16060",
     "idt":"01-08-2019",
     "val":17000.00,
     "pos":"20",
     "rchrg":"N"
  }, { 
     "inum":"OS1920/16066",
     "idt":"02-08-2019",
     "val":17602.00,
     "pos":"29",
     "rchrg":"N"
  }
 ]
},{ 
 "ctin":"guj324djgjh3b",
 "inv":[ 
  { 
     "inum":"OS1920/16064",
     "idt":"03-08-2019",
     "val":19125.00,
     "pos":"26",
     "rchrg":"N"
  }
 ]
}
.
.
.
]

Je dois combiner le nœud enfant et le nœud parent. Ainsi, le résultat sera le suivant

[{ 
 "ctin":"guju3j3jgjh3b",
 "inum":"OS1920/16060",
 "idt":"01-08-2019",
 "val":17000.00,
 "pos":"20",
 "rchrg":"N"
}, { 
 "ctin":"guju3j3jgjh3b",
 "inum":"OS1920/16066",
 "idt":"02-08-2019",
 "val":17602.00,
 "pos":"29",
 "rchrg":"N"
}, { 
 "ctin":"guj324djgjh3b",
 "inum":"OS1920/16064",
 "idt":"03-08-2019",
 "val":19124,
 "pos":"26",
 "rchrg":"N"
},
.
.
.
]

J'ai essayé de faire une recherche sur le SO, mais sans succès.

J'ai également essayé de supprimer le nœud "INV", mais sans succès. Dans Angular, il s'agit simplement de [object object] en raison du bouclage des nœuds les uns dans les autres.

3voto

StepUp Points 246

Cela peut se faire en utilisant map et concat :

const data = [{
  "ctin":"guju3j3jgjh3b",
  "inv":[
   {
      "inum":"OS1920/16060",
      "idt":"01-08-2019",
      "val":17000.00,
      "pos":"20",
      "rchrg":"N"
   }, {
      "inum":"OS1920/16066",
      "idt":"02-08-2019",
      "val":17602.00,
      "pos":"29",
      "rchrg":"N"
   }
  ]
 },{
  "ctin":"guj324djgjh3b",
  "inv":[
   {
      "inum":"OS1920/16064",
      "idt":"03-08-2019",
      "val":19125.00,
      "pos":"26",
      "rchrg":"N"
   }
  ]
 }
];

et le code est :

let notFlattened = data.map(({ctin, inv}) => {
    inv = inv.map(r=> {
          r.ctin = ctin;
          return r;
      });
    return inv;
})
let merged = [].concat.apply([], notFlattened);

console.log(merged);

2voto

PierreDuc Points 25962

Je ne peux que supposer que le JSON est un tableau. Vous pouvez utiliser une combinaison de la fonction .map , .reduce et .concat des méthodes d'Array pour obtenir ce que l'on veut :

const result = data
  .map((item) => item.inv.map((inv) => ({ ctin: item.ctin, ...inv })))
  .reduce((a, b) => a.concat(b), []);

-1voto

Ganesh Points 159

Essayez ceci,

for (var j = 0; j < this.datasource.length; j++) {
  for (var i = 0; i < this.datasource1[j].inv.length; i++) {
     this.datasource[j].inv[i].ctin = this.datasource[j]["ctin"];
  }
  /* delete this.datasource[j]['ctin'];
  this.result.push(this.datasource[j].inv); */
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X