2016-05-01 7 views
0

私は別のサービスからjsonオブジェクトを取得しています。 このjsonデータをExcelファイルにエクスポートして、属性 'access'の値が新しい列として追加され、列にtrue/falseのいずれかが含まれるようにします。 2つのレコードの属性が「詳細」で、「プロジェクト」と「アクセス」属性が異なる場合は、2つのレコードを単一のレコードにマージする必要があります。JSONデータをExcelファイルに書式設定する

例:JSONオブジェクト

{"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"} 
    } 
] 
} 

私はこのようなExcelファイルをしたいです。

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

私は、Excelファイルを生成するために、レールにsend_file使用するのではと思ったが、私は、属性「詳細」の値と「プロジェクト」はsamesであれば2つのレコードをマージするためのアルゴリズムを考えることができませんでした。

jqueryまたはrubyでデータをフォーマットすることができるので、質問にこれらのタグを両方追加します。

+0

プログラミング言語ではないので、実際に* jQueryで何もできません。 * jQueryを使ってJavaScript *で何かできます。 –

答えて

0

いくつかの潜在的な問題がありますが、これはあなたが始める必要があります。

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 

仮定:

  • 詳細ID、詳細オブジェクトとプロジェクトIDを、プロジェクトの種類は、キーを形成し、それがためのものですこれらの値のすべての組み合わせは、出力に1行必要です。何のアクセスが指定されていない場合
  • は、その後、偽

あなたはCSVファイル(または文字列)を生成し、使用してブラウザにそれを送信する方法のルビー/ csvファイルのためのドキュメントを検索することができますsend_data

列の順序を変更する(許可フラグを最後に移動する)ことができる場合は、

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

の各行を代わりに生成することができます。 pは行をコンソールに表示するだけです。これは、CSVを生成するためにフックしたい場所です。

+0

@Diamondheadがこの仕事をしましたか? –