首页 > 解决方案 > Ruby on Rails:从字符串中获取特定的子字符串

问题描述

从字符串中获取数据的一点帮助。

假设我执行了一个 sql 查询,现在有一个字符串(在 db 上设置为哈希):

"{\"users_associated\":{\"User:4\":6,\"User:22\":28,\"User:30\":36}}"

(代表用户:ID:User.display_id)

如何获得包含所有用户 ID 或所有显示 ID 的子字符串,所以我会有类似4,22,306,22,36) 的内容?

谢谢!

标签: ruby-on-rails

解决方案


数据系统通常以序列化的形式返回数据,即使用便于数据传输的数据类型。这些可序列化的数据类型之一是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"


推荐阅读