【问题标题】:Iterating through JSON using Ruby使用 Ruby 遍历 JSON
【发布时间】:2015-03-04 15:12:32
【问题描述】:

我正在尝试遍历下面的 JSON,但出现错误

./test.rb:39:in `[]': can't convert String into Integer (TypeError)
    from ./test.rb:39:in `block in <main>'
    from ./test.rb:38:in `each'
    from ./test.rb:38:in `<main>'

从此代码(第 39 行=print child['data']['body'])

谁能告诉我我做错了什么?

data = JSON.parse(res.body)

38 data.each do |child|
39    print child['data']['body']
40 end

res.body 是这样的:

{ "views": [ "Logs_Messages","Content_Sources","Bitrates_HD_Encoder","Hardware_Status_eCMM","Bitrates_Per_Program","Content_OOB_SI","Debug_Dump","Hardware_Status_In_Band_Tuners","Alarms_Current","Version_Information","Software_Status_License","Hardware_Status_Module_Presence","Reboot","Content_Mappings","Logs_Persistent","Content_Routing","Software_Status_Transcoder_Enabled","Software_Status_Code_Download","Decryption_Identification","Hardware_Status_System_Monitoring","Software_Status_Operating_System_Stats","Software_Status_TLV","Hardware_Status_Out_of_Band_Tuner","Content_EPG","Hardware_Status_HD_Encoders","Alarms_History","Bitrates_Output","Decryption_Status","Bitrates_Input","Software_Status_EPG_Download","Interfaces","Hardware_Status_Output_Module"] }

【问题讨论】:

    标签: ruby json parsing


    【解决方案1】:

    在您的示例中,第 38 行的 data 应该是 res.body 的内容。

    如果我们查看您所说的 res.body 的哈希,我们可以看到它是一个带有一个键“视图”的哈希,并且该键指向一个值数组。

    到目前为止,我不确定您要使用脚本实现什么目标。我猜测您当前正在尝试打印出数组中的每个项目。为此,您需要执行以下操作:

    data = JSON.parse(res.body)
    
    data["views"].each do |view|
      print view
    end
    

    这会访问存储在数组data 中的键views 中的值,然后遍历该数组中的值,并在执行过程中将它们打印出来。

    如果这有帮助,请告诉我!

    【讨论】:

    • 我不认为使用符号 :views 作为键会起作用,因为默认的 JSON 解析器将返回带有字符串键的散列。 "views" 将是在这种情况下使用的关键。
    • 哇,感谢您的快速响应...我得到一个不同的错误 ./test.rb:41:in &lt;main&gt;': undefined method each' for nil:NilClass (NoMethodError)
    • 啊,你是对的,谢谢@joonty。当我在 irb 中尝试时,文本实际上被解析为没有 JSON 解析的 ruby​​ 数组。我已经更新了。
    • @robm 在 joonty 指出错误后,我刚刚更新了我的答案。尝试使用密钥 "views" 而不是密钥 :views
    • @robm 问题左侧的投票箭头下方应该有一个复选标记的轮廓。单击它会将其标记为答案。 :)
    猜你喜欢
    • 2014-04-03
    • 2016-02-10
    • 2015-10-14
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多