【问题标题】:Trouble building Jbuilder nested array构建 Jbuilder 嵌套数组时遇到问题
【发布时间】:2016-10-31 14:10:29
【问题描述】:

我正在尝试编写查询 elasticsearch 数据库并在其上构建报告的 ruby​​ 脚本。我正在使用 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\"}}}"] }}}

如何在主 json 输出中获取内部数组的非转义版本?

提前致谢,

【问题讨论】:

    标签: ruby jbuilder


    【解决方案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) }
    

    如果查询不是每次都返回相同的对象和键,我建议编写一个解析每个值的递归方法。

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 2012-09-21
      • 1970-01-01
      • 2013-12-31
      • 2016-01-16
      • 2018-05-26
      相关资源
      最近更新 更多