2016-07-05 121 views
0

所以我有一个JSON在这里,即时通讯尝试搜索名称检查名称==关键字

我想通读整个JSON,只匹配名称。但我不知道如何去做。

我分析下面的JSON到一个名为jsondata

变量,并创造了这个循环在这里读它。

jsondata.each do |links| 
    puts links 
end 

但是我怎样才能去只读名字段并将其匹配到一个字符串?让我们说,即时通讯寻找词语利奥。

{“文件”:[{"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"}]}

回答

1

你可以在“名”为你正在寻找使用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"}] 
+0

如果找到包含狮子座的东西,我该如何将网址拉出来? – mystycs

+0

如果你想要所有相关的URL,你可以在结果'hash:''jsondata [“files”]上使用'map'。select {| h | H [ “名称”]。包括哪些内容? “leo”} .map {| h | h [“url”]}' – Cam

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 
1

使用jsondata定义b y @Cam,你可以做以下事情。

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"}