如何在 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
如果 e
是 Hash
,正如可以从您显示 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
我必须在 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
如果 e
是 Hash
,正如可以从您显示 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