当前位置: 首页 > 面试题库 >

如何使用ruby遍历此json文档?

裴焱
2023-03-14
问题内容

我有一个Ruby代码块,如下所示:

require "elasticsearch"
require "json"

search_term = "big data"
city = "Hong Kong"
client = Elasticsearch::Client.new log: true
r = client.search index: 'candidates', body:
{
  query: {
    bool: {
      must: [
        {
          match: {
            tags: search_term
          }
        },
        {
          match: {
            city: city
          }
        }
      ]
    }
  }
}

这样会产生多种回报:

{"_index":"candidates","_type":"data",
"_id":"AU3DyAmvtewNSFHuYn88",
"_score":3.889237,
"_source":{"first":"Kota","last":"Okayama","city":"Tokyo","designation":"Systems Engineer","email":"user@hotmail.co.jp","phone":"phone","country":"Japan","industry":"Technology","tags":["remarks","virtualization big data"]}}

我想遍历它并提取各种元素。我努力了

 data = JSON.parse(r)
  data.each do |row|
  puts row["_source"]["first"]
 end

错误是:

no implicit conversion of Hash into String (TypeError)

解决这些难题的最佳方法是什么?


问题答案:

我有解决方案,希望对您有所帮助。我花了数小时的摆弄和实验。这里是:

require "elasticsearch"
require "json"

search_term = "big data"
city = "Tokyo"
client = Elasticsearch::Client.new log: true

h = client.search index: 'swiss_candidates', body:
{
  query: {
    bool: {
      must: [
        {
          match: {
            tags: search_term
          }
        },
        {
          match: {
            city: city
          }
        }
      ]
    }
  }
}

data = JSON.parse(h.to_json) 
data["hits"]["hits"].each do |r|
puts r["_id"]
puts r["_source"]["first"]
puts r["_source"]["tags"][1]
puts r["_source"]["screened"][0]
end

重要的事情似乎是将elasticsearch结果转换为红宝石友好的东西。



 类似资料:
  • 问题内容: 我有一个可以用SwiftyJSON解析的json: 完美运作。 但是我无法遍历它。我尝试了两种方法,第一种是 XCode不接受for循环声明。 第二种方法: XCode不接受if语句。 我究竟做错了什么 ? 问题答案: 如果要遍历数组,请尝试: 至于第二种方法,返回 非 数组,应该使用:

  • 问题内容: 我正在尝试从reddit的API迭代解析的JSON响应。 我已经进行了一些谷歌搜索,似乎其他人也遇到了这个问题,但是似乎没有一种解决方案适合我。Ruby将[‘data] [‘children]视为索引,这会导致错误,但是我只是想从JSON中获取这些值。有什么建议吗? 我的代码: 我在终端中收到的错误消息: 问题答案: 您正在尝试遍历,这是一个哈希,而不是一个列表。您需要通过以下方式从J

  • 问题内容: 我的PHP代码: 虽然它适用于非数组,但我终生无法弄清楚如何打印“审阅”数组中的所有值。 我想做的是遍历此响应,可能使用forreach(),从而得到一个包含响应中每个评论的评分和摘要的列表。 任何指导/方向将不胜感激。 以下是我正在使用的JSON。(这是Yelp API的响应)。 问题答案: 您可能会遇到麻烦,因为评论是一个数组,并且您试图将其作为JSON对象进行访问。

  • 问题内容: 我正在尝试使用Powershell访问JSON对象的特定属性值。不幸的是,我不知道结构中某些父级属性的键,因此我无法直接做到这一点。另外,由于JSON不是数组,因此无法通过索引位置访问。 上下文是我正在从elasticsearch查询正在运行的任务列表,并且需要获取任务的ID(我知道只有一个),因此我可以进行后续调用以发现其完成状态。 我已经研究了一些查询方法,但是不确定如何应用它们(

  • 问题内容: 我有一个需要迭代的JSON文件,如下所示… 数据中的键并不总是相同的(我只是使用示例,有20个不同的键),因此,我无法设置脚本来静态引用它们以获取值。 否则我可以说 过去我在数据节点上使用了一个简单的foreach循环… 但是不想阻止脚本。有任何想法吗? 问题答案: 您可以通过以下方式遍历JavaScript对象: myobject可能是您的json.data

  • 问题内容: 如何使用CodeIgniter在以下JSON中遍历并显示名称? 问题答案: 1)是一个字符串,您需要首先对其进行解码。 2)您需要遍历对象并获取其成员