如何在 ruby 中打印数组内的对象元素

How to print an object element inside an array in ruby

我必须在 shell 中打印我的错误描述,我无法访问数组内对象内的元素,我仍在学习 Ruby。

我试过了

rescue => e
  puts e.fields[description]
...

并且不起作用。

{
  "code": "123",
  "message": "Invalid data.",
  "fields": [
    {
      "name": "test",
      "description": "testing"
    }
  ]
}

---> 我只想打印 testing

谢谢

非常感谢您的帮助:)

e["fields"].each do |field|
 puts field["description"]
end 

怎么样

h = {:code=>"123", :message=>"Invalid data.", :fields=>[{:name=>"test", :description=>"testing"}]}

然后

h.dig(:fields, 0, :description)

你可以这样做 - e[:fields][0][:description]

在您的响应字段中,键包含一个数组对象。

如果你想打印特定的值,那么你需要使用像这样的索引 e["fileds"][0] 然后这将打印 "testing".

如果你想打印所有的描述,那么你应该这样做:

e["fileds"].each do |field|
   puts field["description"]
end

如果 eHash,正如可以从您显示 e 的内容的方式推断的那样, 你可以写

e["fields"][0]["description"]

和往常一样,在 Rails 中有很多方法可以达到同样的效果,有时 不会

您也可以编写 e[:fields][0][:description],但前提是 Hash 具有无差别访问权限,这意味着您可以互换使用字符串和符号(即通过默认情况下,如果您自己创建一个散列,不是这种情况)。

所以为了更详细地解释这一行:e["fields"] returns 一个数组(散列),取第一个元素:e["fields"][0]e["fields"].first 然后得到哈希中键 description 的值。

但是,如果您创建了一个继承自 StandardError 的 class,这通常会引发错误,您很可能必须编写如下内容:

 e.fields 

其中returns字段数组。为了找到第一个元素,我们再次写 e.fields[0]e.fields.first,然后这取决于数组是否包含散列或具有方法 description 的对象,因此它可以是

e.fields[0].description 

e.fields[0][:description] 

(我更喜欢写符号键,但请记住如果你的哈希有字符串作为键并且不是 HashWithIndifferentAccess 你将不得不使用字符串 "description"

如果您想要逗号分隔的描述

descriptions = e["fields"].map{|f| f["description"]}.join(',')
puts descriptions