Я нашел решение. Для тех, кто сталкивается с подобной проблемой, вот решение и небольшой рассказ ...
Сначала я попробовал это:
ruby {
code => '
xx = event.get("[path][to][data_source]")
event.set(['_my_destination'], Hash[xx.collect { |p| [p[:name], p[:value]] }])
'
Но он вернул ошибку из-за Метод set допускает только строку.
Поэтому я попытался сделать это следующим образом:
ruby {
code => '
event.get("[path][to][data_source]").each do |item|
k = item[:name]
event.set("[_my_destination][#{k}]", item[:value])
end
'
}
Я потратил много времени на его отладку, потому что он работает везде, кроме logsta sh: -Д. После некоторого ворчания я наконец исправил это. Решение с комментарием выглядит следующим образом.
ruby {
code => '
i = 0 # need index to address hash in array
event.get("[json_msg][mail][headers]").each do |item|
# need to use event.get function to get value
k = event.get("[json_msg][mail][headers][#{i}][name]")
v = event.get("[json_msg][mail][headers][#{i}][value]")
# now it is simple
event.set("[json_msg][headers][#{k}]", v)
i += 1
end
'
}