В Ruby, как использовать значение ключа из JSON в качестве ключа для хэша ruby, значения которого состоят из двух объединенных значений? - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть JSON из API вида:

{  
"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 в качестве ключа для хэша ruby, значения которого состоят из двух объединенных значений из одного и того жеJSON.

Я решил эту проблему, используя следующий код:

my_list = result.each_with_object({}) do |item, hash|
   hash[item['sys_created_on']] = item['number'] + " | " + item['short_description']
end

Это дало мне то, что мне было нужно, так, как мне было нужно.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вот что я получил в итоге:

  new_old = result.each_with_object({}) do |item, hash|
      hash[item['sys_created_on']] = item['number'] + " | " + 
      item['short_description']
  end

Это повторяет данную коллекцию, передавая каждый элемент и данный объект в блок.Идеально подходит для создания хэшей.

0 голосов
/ 18 декабря 2018
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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...