【问题标题】:How to print an object element inside an array in ruby如何在ruby中打印数组内的对象元素
【发布时间】:2020-02-24 15:19:33
【问题描述】:

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

我试过了

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

而且不起作用。

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

--->我只想打印testing

谢谢

非常感谢您的帮助:)

【问题讨论】:

  • 试试这个:e[:fields].first[:description]
  • 你显示e 好像它是一个哈希,是这样吗?还是codemessagefields 方法是e? (因为这似乎更适合错误对象——但很可能就是这种情况。

标签: ruby-on-rails json ruby puts


【解决方案1】:

怎么样

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

然后

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

【讨论】:

    【解决方案2】:
    e["fields"].each do |field|
     puts field["description"]
    end 
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          【解决方案5】:

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

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

          像往常一样,Rails 有很多方法可以达到相同的效果,有时不是

          您也可以写e[:fields][0][:description],但前提是Hash 具有无关紧要的访问权限,这意味着您可以互换使用字符串和符号(默认情况下,如果您自己创建哈希, 不是的情况)。

          所以要更详细地解释这一行:e["fields"] 返回一个(散列)数组,取第一个元素:e["fields"][0]e["fields"].first,然后在散列中获取键 description 的值。

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

           e.fields 
          

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

          e.fields[0].description 
          

          e.fields[0][:description] 
          

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              猜你喜欢
              • 2020-05-09
              • 2020-09-27
              • 1970-01-01
              • 2019-12-08
              • 2022-09-22
              • 1970-01-01
              • 1970-01-01
              • 2018-07-30
              • 2017-04-07
              相关资源
              最近更新 更多