我从以下形式的API获得JSON:
{
"result":[
{ "sys_created_on":"2018-10-10",
"number":"NUM54321",
"short_description":"This is a short description.",
"other":"this is other stuff"
},{
"sys_created_on":"2018-10-12",
"number":"NUM12345",
"short_description":"This is another short description.",
"other":"more extra stuff"
},{
... and so on for 1000's of lines
在Ruby中,我想做的就是创建一个结构形式
{"sys_created_on(1)" => "number(1) + " | " + short_description(1)",
"sys_created_on(2)" => "number(2) + " | " + short_description(2)",
"sys_created_on(3)" => "number(3) + " | " + short_description(3)",
etc...
}
具体地,使用示例数据:
{"2018-10-10" => "NUM54321 | This is a short description.",
"2018-10-12" => "NUM12345 | This is another short description.",
etc...
}
也就是...将JSON中的键值用作红宝石哈希的键,该值的值由来自同一JSON的两个串联值组成。
我最终使用以下代码解决了这个问题:
my_list = result.each_with_object({}) do |item, hash|
hash[item['sys_created_on']] = item['number'] + " | " + item['short_description']
end
那给了我我所需的方式。
答案 0 :(得分:1)
require 'json'
json = '{ "result":[{ "key1":"value1", "key2":"value2", "keyN":"valueN" }] }'
h = JSON.parse(json)
#=> {"result"=>[{"key1"=>"value1", "key2"=>"value2", "keyN"=>"valueN"}]}
arr = h["result"].first.values
#=> ["value1", "value2", "valueN"]
{ arr.shift=>arr.reduce(:+) }
#=> {"value1"=>"value2valueN"}
当然可以链接前两个语句:
arr = JSON.parse(json)["result"].first.values
#=> ["value1", "value2", "valueN"]
答案 1 :(得分:0)
这就是我最终得到的:
new_old = result.each_with_object({}) do |item, hash|
hash[item['sys_created_on']] = item['number'] + " | " +
item['short_description']
end
这遍历给定的集合,将每个元素和给定的对象传递给块。非常适合构建哈希。