2016-03-28 5 views
0

I JSON-Datei wie unten haben:Knüpfen Sie neue Array für json Daten

[ 
    {"TYPE": "A", "STATUS": "SUCCESS", "DISCOUNT": 500.00, "TOTAL": 5000.00}, 
    {"TYPE": "A", "STATUS": "SUCCESS", "DISCOUNT": 300.00, "TOTAL": 1266.00}, 
    {"TYPE": "A", "STATUS": "FAIL", "DISCOUNT": 300.00, "TOTAL": 515.00}, 
    {"TYPE": "B", "STATUS": "SUCCESS", "DISCOUNT": 323, "TOTAL": 846.00}, 
    {"TYPE": "B", "STATUS": "FAIL", "DISCOUNT": 80.00, "TOTAL": 3000.00}, 
    {"TYPE": "B", "STATUS": "KIV", "DISCOUNT": 105, "TOTAL": 900.00}, 
    {"TYPE": "C", "STATUS": "KIV", "DISCOUNT": 245.00, "TOTAL": 998.75}, 
    {"TYPE": "B", "STATUS": "SUCCESS", "DISCOUNT": 234.00, "TOTAL": 3500.00}, 
    {"TYPE": "C", "STATUS": "SUCCESS", "DISCOUNT": 201, "TOTAL": 5008.00}, 
    {"TYPE": "C", "STATUS": "FAIL", "DISCOUNT": 712, "TOTAL": 12300.00}, 
    {"TYPE": "A", "STATUS": "SUCCESS", "DISCOUNT": 500.00, "TOTAL": 5000.00}, 
    {"TYPE": "D", "STATUS": "SUCCESS", "DISCOUNT": 300.00, "TOTAL": 1266.00}, 
    {"TYPE": "D", "STATUS": "FAIL", "DISCOUNT": 300.00, "TOTAL": 515.00}, 
    {"TYPE": "D", "STATUS": "SUCCESS", "DISCOUNT": 323, "TOTAL": 846.00}, 
    {"TYPE": "B", "STATUS": "FAIL", "DISCOUNT": 80.00, "TOTAL": 3000.00}, 
    {"TYPE": "B", "STATUS": "KIV", "DISCOUNT": 105, "TOTAL": 900.00}, 
    {"TYPE": "C", "STATUS": "KIV", "DISCOUNT": 245.00, "TOTAL": 998.75}, 
    {"TYPE": "B", "STATUS": "SUCCESS", "DISCOUNT": 234.00, "TOTAL": 3500.00}, 
    {"TYPE": "C", "STATUS": "KIV", "DISCOUNT": 201, "TOTAL": 5008.00}, 
    {"TYPE": "C", "STATUS": "SUCCESS", "DISCOUNT": 712, "TOTAL": 12300.00} 
] 

Wie zu machen:

  1. Array von Status
  2. Array von insgesamt (Summe für jeden Status)
  3. Array-Nummer für jeden Status

Beispiel (Exp ektiert Ergebnis):

1) Status [ "SUCCESS", "FAIL", "KIV"]

2) Gesamt [199.000,00, 12000.00, 6000.00]

3) Anzahl der einzelnen Status für jeden Typ wie:

[{A:[{SUCCESS: 2}, 
    {FAIL: 1}] 
}, 
{B:[{SUCCESS:2}, 
    {FAIL:1}, 
    {KIV:1}] 
}] 

ich habe meine eigene Art und Weise und ihre Werke versucht (außer ohne 3), aber ich möchte wissen, ob es einen anderen Weg geben kann zu tun, was einfacher ist. ist unter meinem Schritt:

 var arrStatus=[]; 
     var countStatus=[]; 
     var flagStatus=""; 

     var arrTotal=[]; 

     for (var i = 0; i < data.length; i++) { 
      var tempStatus = data[i].STATUS; 

      flagStatus= false; 

      for(var z = 0; z< arrStatus.length; z++){ 
      if(tempStatus == arrStatus[z]){ 

       arrTotal[z] += data[i].TOTAL; 
       countStatus[z]++; 
       flagStatus = true; 

      } 
      }    

      if(flagStatus == false){ 
      countStatus.push(1); 
      arrStatus.push(tempStatus); 
      arrTotal.push(data[i].TOTAL); 
      } 
     } 

Danke

für die Unterstützung
+0

Angenommen, dies ist C#, können Sie die Newtonsoft.Json-Bibliothek verwenden, um die JSON-Zeichenfolge in ein stark typisiertes JObject zu analysieren. Von diesem Objekt aus können Sie die Daten manipulieren, um ein neues JObject zu Ihrem Wunsch zu generieren. – Mackers

Antwort

0

Hier ist ein Algorithmus. Erstellen Sie eine Karte. Der Schlüssel wäre ein STATUS-Wert. Der Wert ist ein Objekt vom Typ say JsonData (eine Klasse, die Sie erstellen), die zwei Eigenschaften hat: count und total. Iterieren Sie durch Ihre JSON-Daten. Wenn Sie einen neuen Status feststellen, erstellen Sie eine neue Instanz vom Typ JsonData, und legen Sie die entsprechenden Werte fest (z. B. count = 1, total = 5000). Wenn Sie auf einen bereits gesehenen Status stoßen, erhöhen Sie den Zählerstand um eins und den Gesamtbetrag um den neuen Gesamtwert (z. B. count ++ und total = gesamt + 1266, zum zweiten Mal sehen Sie einen SUCCESS-Eintrag).

0

Nicht die beste Lösung da draußen, aber es funktioniert!

function getUnique(array, item) { 
    var items = []; 
    for (var i = 0, len = array.length; i < len; i++) { 
    for (var key in array[i]) { 
     if (key === item) { 
     items.push(array[i][key]); 
     } 
    } 
    } 
    return eliminateDuplicates(items); 
} 

function eliminateDuplicates(arr) { 
    var i, 
    len = arr.length, 
    out = [], 
    obj = {}; 

    for (i = 0; i < len; i++) { 
    obj[arr[i]] = 0; 
    } 
    for (i in obj) { 
    out.push(i); 
    } 
    return out; 
} 
var uniqueStatus = getUnique(data, "STATUS"); 
console.log(uniqueStatus); 

Ouput: [ 'SUCCESS', 'FAIL', 'KIV' ]

function getTotal(array, item) { 
    var sum = 0; 
    for (var i = 0, len = array.length; i < len; i++) { 
    for (var key in array[i]) { 
     if (array[i][key] === item) { 
     sum += array[i]["TOTAL"]; 
     } 
    } 
    } 
    return sum; 
} 
var total = [getTotal(data, "SUCCESS"), getTotal(data, "FAIL"), getTotal(data, "KIV")]; 
console.log(total); 

Ausgang: [ 38532, 19330, 8805.5 ]

var uniqueType = getUnique(data, "TYPE"); 
console.log(uniqueType); 

Ausgang: [ 'A', 'B', 'C', 'D' ]

function makeObject(array, type, status) { 
    var count = 0; 
    for (var i = 0, len = array.length; i < len; i++) { 
    if (array[i]["TYPE"] === type && array[i]["STATUS"] === status) { 
     count++; 
    } 
    } 
    return count; 
} 

console.log(makeObject(data, "B", "SUCCESS")); 

Ausgang: 3