检查name == keyword是否正确

时间:2016-07-05 20:51:34

标签: ruby-on-rails ruby json

所以我在这里有一个json,我试图搜索名称

我试图通读整个json,只匹配名字。但我不知道该怎么做。

我将下面的json解析为一个名为jsondata

的变量

并在此创建此循环以阅读它。

jsondata.each do |links|
  puts links
end

但是我怎样才能只读取名称字段并将其与字符串匹配?让我们说我正在寻找leo这个词。

{ “文件”:[{"name":"github.jpeg","size":10852,"deleteType":"DELETE","deleteUrl":"http://gifs.meow.me/github.jpeg","url":"http://gifs.meow.me/github.jpeg"},{"name":"leo.jpg","size":51678,"deleteType":"DELETE","deleteUrl":"http://gifs.meow.me/leo.jpg","url":"http://gifs.meow.me/leo.jpg"},{"name":"leo2.jpg","size":41407,"deleteType":"DELETE","deleteUrl":"http://gifs.meow.me/leo2.jpg","url":"http://gifs.meow.me/leo2.jpg"}]}

3 个答案:

答案 0 :(得分:1)

您可以在" name"的键下搜索每个字符串。针对您使用String#include?String#index寻找的针头。 Enumerable方法select是仅选择包含您正在寻找的数据的哈希的不错选择:

jsondata["files"].select{|h| h["name"].include? "leo" }

这假设您已将json数据解析为Ruby哈希:

jsondata = {"files"=>[
  {"name"=>"github.jpeg",
   "size"=>10852,
   "deleteType"=>"DELETE",
   "deleteUrl"=>"http=>//gifs.meow.me/github.jpeg",
   "url"=>"http=>//gifs.meow.me/github.jpeg"},
  {"name"=>"leo.jpg",
   "size"=>51678,
   "deleteType"=>"DELETE",
   "deleteUrl"=>"http=>//gifs.meow.me/leo.jpg",
   "url"=>"http=>//gifs.meow.me/leo.jpg"},
  {"name"=>"leo2.jpg",
   "size"=>41407,
   "deleteType"=>"DELETE",
   "deleteUrl"=>"http=>//gifs.meow.me/leo2.jpg",
   "url"=>"http=>//gifs.meow.me/leo2.jpg"}
]}

jsondata["files"].select{|h| h["name"].include? "leo" }
#  => [{"name"=>"leo.jpg", "size"=>51678, "deleteType"=>"DELETE", "deleteUrl"=>"http=>//gifs.meow.me/leo.jpg", "url"=>"http=>//gifs.meow.me/leo.jpg"}, {"name"=>"leo2.jpg", "size"=>41407, "deleteType"=>"DELETE", "deleteUrl"=>"http=>//gifs.meow.me/leo2.jpg", "url"=>"http=>//gifs.meow.me/leo2.jpg"}]

答案 1 :(得分:1)

jsondata.each do |link|
  if link.name =~ /leo/
    # do something
  end
end

jsondata.each do |link|
  if link.name.include? 'leo'
    # do something
  end
end

答案 2 :(得分:1)

使用@Cam定义的jsondata,您可以执行以下操作。

jsondata["files"].each_with_object({}) { |g,h|
  h[g["name"]]=g["url"] if g["name"] =~ /\Aleo/ }
  #=> {"leo.jpg"=>"http=>//gifs.meow.me/leo.jpg",
  #    "leo2.jpg"=>"http=>//gifs.meow.me/leo2.jpg"}