J'ai ce projet où je veux obtenir les données JSON à partir d'un fichier avec un tableau d'objets json avec des attributs répétitifs:
some-file: (chaque objet est sur 1 ligne, pour plus de simplicité je l'ai formaté)
{
"A":"ALL",
"B":"3349256522",
"Location":{
"Country":"USA"
},
"EffectiveDate":"2020-03-04T14:15:52.063Z",
"Demographic":{
"Q":"done",
"G":"ok",
"AppVersion":"1.3.4",
},
"ApplicationId":"92398723892937",
"Id":"23232993939333",
"CreationDate":"2020-03-04T14:15:52.063Z"
}
{
"A":"NONE",
"B":"8469256522",
"Location":{
"Country":"SPAIN"
},
"EffectiveDate":"2020-03-04T14:15:52.063Z",
"Demographic":{
"Q":"done",
"G":"ok",
"AppVersion":"1.3.5",
},
"ApplicationId":"92398723892937",
"Id":"23232993939333",
"CreationDate":"2020-03-09T14:15:52.063Z"
}
{
"A":"ALL",
"B":"8469256522",
"Location":{
"Country":"USA"
},
"EffectiveDate":"2020-03-04T14:15:52.063Z",
"Demographic":{
"Q":"done",
"G":"ok",
"AppVersion":"1.3.4",
},
"ApplicationId":"92398723892937",
"Id":"23232993939333",
"CreationDate":"2020-03-11T14:15:52.063Z"
}
Je voudrais obtenir des statistiques pour des éléments spécifiques, Country et AppVersion. Comment puis-je le traiter à l'aide de NodeJs pour produire cette sortie:
{
"stats":{
"Country":{
"USA":"2",
"SPAIN":"1"
},
"AppVersion":{
"1.3.4":"2",
"1.3.5":"1"
}
}
}
En outre, le fichier d'entrée «certains fichiers» n'est pas un fichier JSON valide, une recommandation sur la façon de le convertir pour être valide (dans le code)?
The original file is (1 line each object):
{ "A":"ALL", "B":"3349256522", "Location":{ "Country":"USA" }, "EffectiveDate":"2020-03-04T14:15:52.063Z", "Demographic":{ "Q":"done", "G":"ok", "AppVersion":"1.3.4" }, "ApplicationId":"92398723892937", "Id":"23232993939333", "CreationDate":"2020-03-04T14:15:52.063Z"}
{ "A":"ALL", "B":"3349256522", "Location":{ "Country":"SPAIN" }, "EffectiveDate":"2020-03-04T14:15:52.063Z", "Demographic":{ "Q":"done", "G":"ok", "AppVersion":"1.3.5" }, "ApplicationId":"92398723892937", "Id":"23232993939333", "CreationDate":"2020-03-04T14:15:52.063Z"}
{ "A":"ALL", "B":"3349256522", "Location":{ "Country":"ITALY" }, "EffectiveDate":"2020-03-04T14:15:52.063Z", "Demographic":{ "Q":"done", "G":"ok", "AppVersion":"1.3.4" }, "ApplicationId":"92398723892937", "Id":"23232993939333", "CreationDate":"2020-03-04T14:15:52.063Z"}
Vous pouvez utiliser array.reduce pour accumuler les valeurs de comptage:
let input = [{
"A":"ALL",
"B":"3349256522",
"Location":{
"Country":"USA"
},
"EffectiveDate":"2020-03-04T14:15:52.063Z",
"Demographic":{
"Q":"done",
"G":"ok",
"AppVersion":"1.3.4",
},
"ApplicationId":"92398723892937",
"Id":"23232993939333",
"CreationDate":"2020-03-04T14:15:52.063Z"
},
{
"A":"NONE",
"B":"8469256522",
"Location":{
"Country":"SPAIN"
},
"EffectiveDate":"2020-03-04T14:15:52.063Z",
"Demographic":{
"Q":"done",
"G":"ok",
"AppVersion":"1.3.5",
},
"ApplicationId":"92398723892937",
"Id":"23232993939333",
"CreationDate":"2020-03-09T14:15:52.063Z"
},
{
"A":"ALL",
"B":"8469256522",
"Location":{
"Country":"USA"
},
"EffectiveDate":"2020-03-04T14:15:52.063Z",
"Demographic":{
"Q":"done",
"G":"ok",
"AppVersion":"1.3.4",
},
"ApplicationId":"92398723892937",
"Id":"23232993939333",
"CreationDate":"2020-03-11T14:15:52.063Z"
}];
let result = input.reduce((acc,current) => {
let c = current.Location.Country;
let v = current.Demographic.AppVersion;
if(acc.Country[c]){
acc.Country[c]++;
} else {
acc.Country[c] = 1;
}
if(acc.AppVersion[v]){
acc.AppVersion[v]++;
} else {
acc.AppVersion[v] = 1;
}
return acc;
}, {Country: {}, AppVersion: {}});
console.log({ stats: result });
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots