Проблема построения вложенного массива Jbuilder

Я пытаюсь написать сценарий e ruby, который запрашивает базу данных elasticsearch и строит на ней отчет. Я использую jbuilder для построения строки запроса следующим образом:

require 'elasticsearch'
require 'date'
require 'jbuilder'

client = Elasticsearch::Client.new log: true, host: 'x.x.x.x',  request_timeout: 10

filter_conditions = {}
filter_conditions['must'] = []
filter_conditions['should'] = []

filter_conditions['must'] << Jbuilder.encode do |json|
  json.term do
    json._type 'httpry-log'
  end
end

filter_conditions['must'] << Jbuilder.encode do |json|
  json.range do
    json.set! '@timestamp' do
      _now = DateTime.now
      json.gte (_now - 1.00/24).strftime('%Q').to_i
      json.lte _now.strftime('%Q').to_i
      json.format 'epoch_millis'
    end
  end
end

query = Jbuilder.encode do |json|
  json.size 10
  json.query do
    json.bool do
      json.must do
        json.array!(filter_conditions['must'])
      end
    end
  end
end

puts query

Но вот результат, который я получаю для запроса:
{«size»:10,»query»:{«bool»:{«must»:[«{«term»:{«_type»:»httpry-log»}}»,»{«range»:{«@timestamp»:{«gte»:1477919154057,»lte»:1477922754057,»format»:»epoch_millis»}}}»]}}}

Как получить unscaped версию внутреннего массива внутри главного вывода json?

Спасибо заранее,

1 ответ

  1. Предположим, что запрос возвращает один и тот же объект и ключ каждый раз:

    a = your_query_hash
    # The following map! will parse your string array into an array in ruby
    a[:query][:bool][:must].map! { |arr| JSON.parse(arr) }
    

    Если запрос не возвращает один и тот же объект и ключ каждый раз, я бы предложил написать рекурсивный метод, который анализирует каждое значение.