Ruby - 如何将字符串解析为哈希数组

4

我可以帮忙翻译,以下是内容:

我在数据库中存储了一个字符串,如下:

images = '[{"id":1,"type":"Image","image_id":"asdf123"},{"id":2,"type":"Image","image_id":"asdf456"},{"id":3,"type":"Image","image_id":"asdf890"}]'

我希望将其转换为数组,这样我就可以执行类似以下操作的操作:

images.each do |image|
    puts image.image_id
end

只需要去掉外层方括号,然后按照这个问题的步骤进行转换,还是有更加直接和优雅的方法吗?


问题不清楚。数据库存储的格式是什么?这不是去掉外部方括号的问题。 - sawa
@sawa 为什么不清楚呢?问题说明了“我在数据库中存储了一个字符串”,它被存储为字符串。 - waffl
请注意,世界上有不止一种数据库格式。此外,您提供的内容不是有效的 Ruby 字符串。 - sawa
1个回答

8

这种格式被称为JavaScript对象表示法(JSON),可以通过内置的Ruby库进行解析:

require 'json'

images_str = '[{"id":1,"type":"Image","image_id":"asdf123"},{"id":2,"type":"Image","image_id":"asdf456"},{"id":3,"type":"Image","image_id":"asdf890"}]'

images = JSON.parse(images_str)
images.size           # => 3
images[0].class       # => Hash
images[0]['image_id'] # => "asdf123"

images.each { |x| puts "#{x['id']}: #{x['image_id']}" }
# 1: asdf123
# 2: asdf456
# 3: asdf890

谢谢,这正是我想的。我一直在尝试使用images.each do |image|循环遍历JSON.parse的结果,但是一直得到undefined method 'each' for nil:NilClass的错误。我这样做错了吗? - waffl
1
@waffl:没有看到你的具体代码和数据,很难说为什么会出现那个错误;不过,我猜测你实际上没有解析你期望的 JSON 字符串,所以你得到的是一个 nil 值而不是一个数组。 - maerics
你是正确的 - 我没有解析正确的字符串,现在它完美地工作了! - waffl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接