如何检查某个键值对是否以 Ruby on Rails 中的 JSON 形式存在于哈希数组中



我有一个哈希数组作为json,所以如何检查我的哈希数组包含具有给定键值对的哈希。

这是我的json

[{"question"=>"0a2a3452", "answer"=>"bull"}, {"question"=>"58deacf9", "answer"=>"bullafolo"}, {"question"=>"32c53e5f", "answer"=>"curosit"}, {"question"=>"b5546bcf", "answer"=>""}, {"question"=>"0f0b314", "answer"=>""}]

我尝试遍历json数组,但这很乏味,因为我需要检查该json是否具有具有给定键值对的哈希值

这是一个问卷表格,我必须在其中更新答案

if !@client_find.nil?    
@client_find.questionnaire
params[:commit].each do |key, value|
@json=[]
@json = @client_find.questionnaire
if !value.empty? && @json.include?(key)
puts "blunderc "+ value.inspect
@new_append = Hash.new
@new_append[:question] = key
@new_append[:answer]= value
@json << @new_append
end
if !key.empty? && !value.empty?
#logic
@json.each  do |u|
if (u.key? key)
puts "bothu "+ u[key].inspect
u[key] = value
end
end
end
end

Array#any? 遍历数组。在每次迭代中,我都会检查当前哈希是否具有搜索到的问题键。如果找到哈希数组#任何?返回真,否则返回假。

array = [{"question"=>"0a2a3452", "answer"=>"bull"}, {"question"=>"58deacf9", "answer"=>"bullafolo"}, {"question"=>"32c53e5f", "answer"=>"curosit"}, {"question"=>"b5546bcf", "answer"=>""}, {"question"=>"0f0b314", "answer"=>""}]
search_for_key = '0a2a3452'
array.any?{|hash| hash['question'] == search_for_key}

我假设您要检查是否存在具有键/值对"quesetion" => "some-value"的哈希。

以下是您可以做到这一点的方法:

array.any? { |item| item['question'] == 'some-question-id' }

考虑到您正在检查特定键是否存在

@json.any? {|obj| obj.key?(your_particular_key)

您可以使用Enumerable#select筛选数组,以仅获取包含所需键的哈希。

filtered = my_hash.select { |item| item['desired_key'] }

这是可能的,因为nil是假的。如果输入的是原始 JSON,则需要使用JSON#parse或任何其他等效方法将其解析为 Ruby 哈希。

filtered将为您提供包含desired_key的所有哈希值。

这就是你想要的吗? 顺便说一句,吉他手的答案要好得多!

questions = [{"question"=>"0a2a3452", "answer"=>"bull"}, {"question"=>"58deacf9", "answer"=>"bullafolo"}, {"question"=>"32c53e5f", "answer"=>"curosit"}, {"question"=>"b5546bcf", "answer"=>""}, {"question"=>"0f0b314", "answer"=>""}]
result = questions.find { |question| question['question'] == "Bonour" }
if result.nil?
puts "Not found"
else
puts "#{result['question']} #{result['answer']}"
end

最新更新