Объединить несколько массивов + переменную в один объект JSON - PullRequest
1 голос
/ 22 января 2020

Я хочу объединить два массива и два постоянных значения в один объект json.

мои массивы:
arraywithperson = [Альфредо, Джеймс, Джон, Сара, Владимир]

arraywithduration = [1,5,3,1,4]

переменные:
start_date = Date.today

parent = 1

My Json Output should be:
    {"data": [
           {"person": "Alfredo", "start_date" = 22.01.2020, "duration": 1, "parent": "1"}
           {"person": "James", "start_date" = 22.01.2020, "duration": 5, "parent": "1"}
           {"person": "John", "start_date" = 22.01.2020, "duration": 3, "parent": "1"}
           {"person": "Sarah", "start_date" = 22.01.2020, "duration": 1, "parent": "1"}
           {"person": "Vladimir", "start_date" = 22.01.2020, "duration": 4, "parent": "1"}
           ]}

Как можно я объединяю массивы с моими переменными, чтобы получить этот вывод json?

1 Ответ

1 голос
/ 22 января 2020

Вы можете использовать zip и карту для этого:

output = arraywithduration.zip(arraywithperson).map do |duration, person|
           {
             'person': person,
             'start_date': start_date,
             'duration': duration,
             'parent': parent
           }
         end
{ 'data': output }

С помощью zip вы можете объединить элементы arraywithduration и элементы arraywithperson в массив из 2 элементов, внутри «основного» массива:

# [[1, "Alfredo"], [5, "James"], [3, "John"], [1, "Sarah"], [4, "Vladimir"]]

И map позволяет перебирать каждый элемент и создавать ха sh с необходимыми ключами и значениями:

# [{:person=>"Alfredo",  :start_date=>"22.01.2020", :duration=>1, :parent=>1},         
#  {:person=>"James",    :start_date=>"22.01.2020", :duration=>5, :parent=>1}, 
#  {:person=>"John",     :start_date=>"22.01.2020", :duration=>3, :parent=>1}, 
#  {:person=>"Sarah",    :start_date=>"22.01.2020", :duration=>1, :parent=>1}, 
#  {:person=>"Vladimir", :start_date=>"22.01.2020", :duration=>4, :parent=>1}]

Чтобы получить начальную дату, как показано в ожидаемом выводе, вы можете использовать strftime (это строковое BTW):

start_date = Date.today.strftime('%d.%m.%Y')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...