解析一些JSON之后:
data = JSON.parse(data)['info']
puts data
我明白了:
[
{
"title"=>"CEO",
"name"=>"George",
"columns"=>[
{
"display_name"=> "Salary",
"value"=>"3.85",
}
, {
"display_name"=> "Bonus",
"value"=>"994.19",
}
, {
"display_name"=> "Increment",
"value"=>"8.15",
}
]
}
]
columns
已嵌套数据。
我想将数据保存在数据库或CSV文件中。
title, name, value_Salary, value_Bonus, value_increment
但是我并不关心获取display_name
,所以只关注第一列的值,第二列的数据等等。
好的我在转换为hash& amp;之后尝试了data.map hash.flatten可以找到出路.. .map {| x | X [ '列']} .map {| s | S [ “值”]} 试图分别得到这些价值 - 但不能......
答案 0 :(得分:0)
这是一个简单的问题,可以解析为几个嵌套的map
块。
以下是从JSON检索到的数据,以及一个额外的行来演示处理更复杂的JSON响应是多么容易:
data = [
{
"title" => "CEO",
"name" => "George",
"columns" => [
{
"display_name" => "Salary",
"value" => "3.85",
},
{
"display_name" => "Bonus",
"value" => "994.19",
},
{
"display_name" => "Increment",
"value" => "8.15",
}
]
},
{
"title" => "CIO",
"name" => "Fred",
"columns" => [
{
"display_name" => "Salary",
"value" => "3.84",
},
{
"display_name" => "Bonus",
"value" => "994.20",
},
{
"display_name" => "Increment",
"value" => "8.15",
}
]
}
]
以下是代码:
records = data.map { |record|
title, name = record.values_at('title', 'name')
values = record['columns'].map{ |column| column['value'] }
[title, name, *values]
}
这是结果数据结构,一个数组数组:
records
# => [["CEO", "George", "3.85", "994.19", "8.15"],
# ["CIO", "Fred", "3.84", "994.20", "8.15"]]
将它保存到数据库或CSV留给你去弄清楚,但Ruby的CSV类使编写文件变得微不足道,像Sequel之类的ORM使它真正很容易将数据插入数据库。