Конвертировать массив ha sh по logsta sh в простой хеш - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь разобрать по logsta sh это:

"attributes": [
          {
            "value": "ValueA",
            "name": "NameA"
          },
          {
            "value": "ValueB",
            "name": "NameB"
          },
          {
            "value": "ValueC",
            "name": "NameC"
          }
        ],

На это:

"attributes": {
  "NameA": "ValueA",
  "NameB": "ValueB",
  "NameC": "ValueC"
}

Любые рекомендации?

Я не хочу разделить этот список на большее количество записей ...

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Я нашел решение. Для тех, кто сталкивается с подобной проблемой, вот решение и небольшой рассказ ...

Сначала я попробовал это:

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
  '
}
0 голосов
/ 19 марта 2020

Я думаю, вы должны сделать это с помощью специального скрипта Ruby - см. Фильтр ruby. Вы будете использовать Event API для управления событием.

Возможно, можно использовать фильтр aggregate, но сценарий Ruby с одним для l oop мне кажется более простым.

...