【问题标题】:How to iterate over this Json data in rails?如何在rails中迭代这个Json数据?
【发布时间】:2015-08-16 15:01:16
【问题描述】:

我正在尝试迭代这个 Json 数据我想从“我尝试做的数据中获取项目”

@Response =HTTParty.get(("http://ddragon.leagueoflegends.com/cdn/5.15.1/data/en_US/item.json"))
puts @Response["data"].each do |item|
    puts item
end

我还希望能够在不必事先知道 IDS 的情况下迭代它们,例如第一项是“1001”我不想手动输入这些

但这只是说它找不到任何带有 '[]' 的 Nil:NilClass 同样在有人提到下面的 JSON 没有完成之前,因为我只拿了一个样本,还有很多项目,如果我要粘贴它,它很容易超过 1000 行。

"type":"item",
"version":"5.15.1",
"basic":{},
"data":{
        "1001":{
                "name":"Boots of Speed",
                "group":"BootsNormal",
                "description":"<groupLimit>Limited to 1.</groupLimit><br><br>                                                 <unique>UNIQUE Passive - Enhanced Movement:</unique> +25 Movement Speed<br><br>                 <i>(Unique Passives with the same name don't stack.)</i>",
                "colloq":";",
                "plaintext":"Slightly increases Movement Speed",
                "into":[
                        "3006",
                        "3047",
                        "3020",
                        "3158",
                        "3111",
                        "3117",
                        "3009"
                ],
                "image":{
                        "full":"1001.png",
                        "sprite":"item0.png",
                        "group":"item",
                        "x":0,
                        "y":0,
                        "w":48,
                        "h":48
                },
                "gold":{
                        "base":325,
                        "purchasable":true,
                        "total":325,
                        "sell":227
                },
                "tags":[
                        "Boots"
                ],
                "stats":{
                        "FlatMovementSpeedMod":25.0
                }
        },
        "1004":{
                "name":"Faerie Charm",
                "description":"<stats><mana>+25% Base Mana Regen </mana></stats>",
                "colloq":";",
                "plaintext":"Slightly increases Mana Regen",
                "into":[
                        "3028",
                        "3070",
                        "3073",
                        "3114"
                ],
                "image":{
                        "full":"1004.png",
                        "sprite":"item0.png",
                        "group":"item",
                        "x":48,
                        "y":0,
                        "w":48,
                        "h":48
                },
                "gold":{
                        "base":180,
                        "purchasable":true,
                        "total":180,
                        "sell":126
                },
                "tags":[
                        "ManaRegen"
                ],
                "stats":{
                }
        },

【问题讨论】:

  • 请花一些时间很好地缩进 JSON,它现在看起来不可读。
  • 好的,现在应该会更好
  • 你确定你的 Ruby 是正确的吗?看起来不对。您的 JSON 响应是否真的存储在 @Response 中?响应哈希的键是否应该像这样缺少右引号?
  • 引号是固定的,但是响应是@Response 我添加了实际响应的代码只是为了显示(它是 HTTParty::response)

标签: ruby-on-rails json httparty


【解决方案1】:

四个问题:

  1. 您没有使用JSON.parse 解析响应正文
  2. 您不应该使用常量名(以大写字母开头)作为变量名 (@Response)。
  3. 迭代时不需要puts
  4. data 的值不是一个数组,而是另一个哈希值。因此,您应该将其作为键/值对进行迭代。

解决方案:

@response = JSON.parse(HTTParty.get(your_url).body)
@response["data"].each do |key, value|
  puts key
  puts value
end

【讨论】:

  • 感谢您的帮助没有意识到这一点!
  • 如果你使用 HTTParty.get(your_url).body.parsed_response 这也会给你一个 Hash 数据类型,这与你通过 JSON.parse 得到的输出相同
【解决方案2】:

我以前做过类似的事情,也许可以帮助你这里是链接 - Reading Json using Ruby

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多