所以我在这里有一个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"}]}
答案 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"}