2016-05-01 6 views
0

Ich habe ein JSON-Objekt, das ich von einem anderen Dienst bekomme. Ich möchte, dass diese JSON-Daten in eine Excel-Datei exportiert werden, so dass der Wert des Attributs "access" als neue Spalte angehängt wird und die Spalte entweder true/false enthält. Wenn zwei Datensätze das gleiche Attribut "Details" und "Projekt" und "Zugriff" -Attribut haben, dann sollten die beiden Datensätze zu einem einzigen Datensatz in Excel zusammengeführt werden mit beiden Werten des Attributs mit True.Formatieren von JSON-Daten in eine Excel-Datei

Ex: JSON-Objekt

{"Approvals": 
[ 
    {"details": 
    {"ID": "A", 
    "object": "person"}, 
    "access": "user", 
    "project": 
    {"ID": "Z", 
    "entityType": "domain"} 
    }, 
    {"details": 
    {"ID": "B", 
    "object": "person"}, 
    "access": "superuser", 
    "project": 
    {"ID": "Z", 
    "entityType": "domain"} 
    }, 
    {"details": 
    {"ID": "A", 
    "object": "person"}, 
    "access": "superuser", 
    "project": 
    {"ID": "Z", 
    "entityType": "domain"} 
    } 
] 
} 

Ich möchte eine Excel wie diese Datei.

details/ID,details/object,user,superuser,project/ID,project/entityType 
A   ,person  ,true,true  ,Z   ,domain 
B   ,person  ,false,true ,Z   ,domain 

Ich dachte an send_file in Schienen mit Hilfe der Excel-Datei zu erzeugen, aber ich konnte nicht von Algorithmus denken die beiden Datensätze zu verschmelzen, wenn Wert des Attributs „Details“ und „Projekt“ sind Sames.

Ich kann die Daten entweder in Jquery oder Ruby formatieren, also füge ich diese beiden Tags in der Frage hinzu.

+0

Sie können eigentlich nichts * in * jQuery tun, weil es keine Programmiersprache ist. Sie können etwas in JavaScript * mit * jQuery machen. –

Antwort

0

Zwar gibt es einige mögliche Fragen sind, sollte dies Ihnen den Einstieg:

data = {"Approvals" => 
[ 
    {"details" => 
    {"ID" => "A", 
    "object" => "person"}, 
    "access" => "user", 
    "project" => 
    {"ID" => "Z", 
    "entityType" => "domain"} 
    }, 
    {"details" => 
    {"ID" => "B", 
    "object" => "person"}, 
    "access" => "superuser", 
    "project" => 
    {"ID" => "Z", 
    "entityType" => "domain"} 
    }, 
    {"details" => 
    {"ID" => "A", 
    "object" => "person"}, 
    "access" => "superuser", 
    "project" => 
    {"ID" => "Z", 
    "entityType" => "domain"} 
    } 
] 
} 



records = Hash.new do |hash, key| 
    hash[key] = [false, false] 
end 

data['Approvals'].each do |record| 
    detail_id = record['details']['ID'] 
    detail_object = record['details']['object'] 

    project_id = record['project']['ID'] 
    project_type = record['project']['entityType'] 

    key = [detail_id, detail_object, project_id, project_type] 

    index = record['access'] == 'superuser' ? 1 : 0 
    records[key][index] = true 
end 

records.each do |key, value| 
    p [key[0], key[1], value[0], value[1], key[2], key[3]] 
end 

Annahmen:

  • Detail id, Detail-Objekt und Projekt-ID, Typ Projekt den Schlüssel bilden, dh für Bei jeder Kombination dieser Werte benötigen Sie eine Zeile in der Ausgabe.
  • wenn kein Zugriff angegeben, dann falsch

Sie können die doc für Ruby/csv, wie eine CSV-Datei (oder String) zu erzeugen suchen und dann, dass an den Browser senden mit send_data

wenn es möglich ist, die Reihenfolge der Spalten zu ändern (verschieben Sie die Berechtigungs-Flags zu Ende), dann können Sie jede Zeile erzeugen mit

records.each do |key, value| 
    p key + value 
end 

statt. Bitte beachten Sie, dass nur die Zeile an die Konsole druckt, an der Sie die CSV generieren möchten.

+0

@Diamondhead hat diese Arbeit für Sie getan? –