使用“键==值”条件搜索(过滤)JSON数组

时间:2019-01-08 13:20:08

标签: ruby

我无法在ruby中搜索数组中的特定对象。

我已经从获取结果JSON的地方向https://jsonplaceholder.typicode.com/todos发出了请求。我正在尝试将其转换为对象数组,然后搜索出现的位置(我知道我可以发出带参数的请求,它将解决我的问题,但我无权访问后端)。

我试图在数组中打印包含对象中特定值的数组中的对象,并获取布尔值来说明字符串是否存在于数组中(我还试图在堆栈上找到问题的答案(这是似乎最接近我的问题Ruby find and return objects in an array based on an attribute,但对我没有太大帮助。

client = HTTPClient.new
method = 'GET'
url = URI.parse 'https://jsonplaceholder.typicode.com/todos'
res = client.request method, url
dd = JSON.parse(res.body)
puts dd.select { |word| word.completed == false }
puts dd.include?('temporibus atque distinctio omnis eius impedit tempore molestias pariatur')

实际结果

select返回的falseinclude?完全没有结果

预期结果

select应该放置到completed等于false的终端对象上。

如果数组中存在作为参数提供的值,

include?应该返回true

1 个答案:

答案 0 :(得分:2)

这是工作代码段:

require 'httpclient'
require 'json'

client = HTTPClient.new
method = 'GET'
url = URI.parse 'https://jsonplaceholder.typicode.com/todos'
res = client.request method, url
dd = JSON.parse(res.body)

# Use word['completed'] instead of word.completed here:
puts dd.select { |word| !word['completed'] }

# Use 'any?' array (Enumerable) method to check
# if any member of the array satisfies given condition:
puts dd.any? { |word| word['title'] == 'temporibus atque distinctio omnis eius impedit tempore molestias pariatur' }

#any?的文档可以在这里找到:https://apidock.com/ruby/Enumerable/any%3F