ruby-on-rails - Ruby on Rails:从字符串中获取特定的子字符串
问题描述
从字符串中获取数据的一点帮助。
假设我执行了一个 sql 查询,现在有一个字符串(在 db 上设置为哈希):
"{\"users_associated\":{\"User:4\":6,\"User:22\":28,\"User:30\":36}}"
(代表用户:ID:User.display_id)
如何获得包含所有用户 ID 或所有显示 ID 的子字符串,所以我会有类似4,22,30
或6,22,36
) 的内容?
谢谢!
解决方案
数据系统通常以序列化的形式返回数据,即使用便于数据传输的数据类型。这些可序列化的数据类型之一是String
,这是接收 JSON 数据对象的方式。
第一步是将其反序列化(或解析)String
为一个Hash
对象,使用JSON.parse
并梳理出键“users_associated”的数据值。
your_string = "{\"users_associated\":{\"User:4\":6,\"User:22\":28,\"User:30\":36}}"
hash = JSON.parse(your_string)
data = hash["users_associated"]
#=> {"User:4":6, "User:22": 28, "User:30": 36}
Hash#keys
给你一个哈希键的数组。
Hash#values
为您提供哈希数据值的数组。
keys = data.keys
#=> ["User:4", "User:22", "User:30"]
values = data.values
#=> [6, 28, 36]
Array#join
,
在这种情况下,您可以使用定义的分隔符将数组的内容串在一起。
display_ids = keys.join(',')
#=> "6,28,36"
对于用户 ID,您可以使用数组Array#map
的每个元素将values
“用户:”的每个字符串替换为“”,使用String#gsub
.
user_ids = values.map{|user_id| user_id.gsub("User:", "")}
#=> ["4", "22", "30"]
然后,以类似的方式display_ids
,我们可以Array#join
将数组的内容user_ids
转换为单个字符串。
user_ids = user_ids.join(",")
#=> "4,22,30"
推荐阅读
- javascript - 显示第一个 div 并隐藏其余部分,然后在几秒钟后通过隐藏其余部分(包括第一个 div)显示第二个 div
- azure - Azure CLI 使用什么身份验证流?
- javascript - 从距离矩阵 api 响应中提取城市名称
- ruby - 对等方重置连接 (Errno::ECONNRESET)
- javascript - Axios 返回待处理的承诺
- c# - 如何在 Unity 2d 中为我的乒乓球比赛得分
- php - DOMPDF 在“渲染”方法中给出错误。字体有问题。我该如何解决?
- python - 循环遍历字典键中的最后一个值而不是字典中的所有值
- ios - XCode:具有不断变化的用途和许多需要运行的案例的按钮
- django - 如何将本地 Django 模型更改迁移到生产环境?