ruby-on-rails - 如何在大型 JSON 数组中搜索并通过多个键查找记录

标签 ruby-on-rails json ruby

我有一个非常大的数据集,其组织方式如下:

users = [
    {
        username: "Bill",
        gender: "Male",
        details: {
            city: "NY"
        }
    },
    {
        username: "Mary",
        gender: "Female",
        details: {
            city: "LA"
        }
    }
]

我需要一种通过多个键的多个值搜索多条记录的快速方法。

我有以点分隔的键列表:

keys = ["gender", "details.city"]

我需要做这样的事情(用伪代码编写):

my_users = users.any? {|user|
  keys.each do |key|
    user.key == "NY"
  end
}

我知道这行不通。它不起作用的原因之一是我的键列表是点分隔的,所以我可以将它拆分为一个键数组,如 ['gender'][ 'details']['city'],或使用如下方法将用户哈希转换为以点分隔的对象:

def to_o
  JSON.parse to_json, object_class: OpenStruct
end

最佳答案

希望这个方法能如你所愿

def search(users, keys, value)
  users.select do |user|
    keys.any? do |key|
      user.dig(*key.split('.').map(&:to_sym)) == value
    end
  end
end

search(users, keys, 'NY')
#=> [{ :username => "Bill", :gender => "Male", :details => { :city => "NY" } }]

关于ruby-on-rails - 如何在大型 JSON 数组中搜索并通过多个键查找记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58614275/

相关文章:

javascript - Rails 3 - Javascript :confirm not working for link_to and button_to with :method => :delete

ruby-on-rails - 嵌套 Controller 中未初始化的常量错误

ruby - 如何构建自己的 gem 并在另一个项目中使用它?

mysql - 这个 SQL 语法正确吗?

mysql - 如何使用 rails ActiveRecord 以最小的成本实现连接列表的概念?

jquery - Ruby on Rails 自动完成与灵魂伴侣 URL

json - 查询Mongodb子文档错误将循环结构转换为JSON

ruby-on-rails - request.raw_post 在发送 webhook 时返回 nil

javascript - 使用字符串访问 json

ruby-on-rails - Rails 多态关联 : getter and setter methods