在Ruby中,如何使用JSON中的键值作为其值由两个串联值组成的红宝石哈希的键?

时间:2018-12-18 17:33:42

标签: ruby

我从以下形式的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

那给了我我所需的方式。

2 个答案:

答案 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

这遍历给定的集合,将每个元素和给定的对象传递给块。非常适合构建哈希。