簡體   English   中英

將JSON數據格式化為Excel文件

[英]Formatting JSON data to a excel file

我有一個json對象,可以從其他服務獲取它。 我希望將此json數據導出到excel文件中,以便將屬性“ access”的值附加為新列,並且該列包含true / false。 如果兩個記錄具有相同的“細節”屬性,並且“項目”和“訪問”屬性不同,則應將兩個記錄合並到excel中的單個記錄中,並且兩個屬性值都包含true。

例如: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

我曾考慮過在rails中使用send_file生成excel文件,但是如果屬性“ details”和“ project”的值相同,則無法考慮合並兩個記錄的算法。

我可以用jquery或ruby格式化數據,所以我在問題中同時添加了這兩個標簽。

盡管存在一些潛在的問題,但這應該可以幫助您入門:

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,項目類型構成鍵,也就是說,對於這些值的每種組合,在輸出中都需要一行。
  • 如果未指定訪問權限,則為false

您可以查找ruby / csv的文檔,了解如何生成CSV文件(或字符串),然后使用send_data將其發送到瀏覽器

如果可以更改列的順序(將權限標志移到末尾),則可以使用

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

代替。 請注意, p只是將行打印到控制台,這是您要掛接以生成CSV的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM