如何从 JSON 响应中提取召唤师名称?
How can I extract a Summoner Name from a JSON response?
我正在玩 英雄联盟 的外部 API。到目前为止,我已经能够从 API 获得响应,其中 returns 一个 JSON 对象。
@test_summoner_name = ERB::Util.url_encode('Jimbo')
@url = "https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/#{@test_summoner_name}?api_key=#{RIOT_API_KEY}"
response = HTTParty.get(@url)
@summoner = JSON.parse(response.body)
@summoner_name = @summoner[:name]
JSON 对象如下所示:
{"jimbo"=>{"id"=>12345678, "name"=>"Jimbo", "profileIconId"=>1234, "revisionDate"=>123456789012, "summonerLevel"=>10}}
因此,我能够在我的视图中使用 @summoner 变量输出 JSON 对象。但是当我尝试输出我的 @summoner_name 变量时,我只得到一个空字符串。
供参考,这是我目前的看法:
Summoner Object: <%= @summoner %><br>
Summoner Name: <%= @summoner_name %>
如有任何帮助,我们将不胜感激。我现在一整天都在跌跌撞撞地完成这个过程。
如果您的 json 看起来像这样可能会有所帮助:
{"jimbo"=>{
"id"=>12345678,
"name"=>"Jimbo",
"profileIconId"=>1234,
"revisionDate"=>123456789012,
"summonerLevel"=>10}
}
那你就可以
@summoner_jimbo_name = @summoner['jimbo']['name']
获取值:
Jimbo
问题
您没有您认为的哈希值。一旦你解析了你的 JSON,你的 @summoner 实例变量实际上包含了包含在名为 jimbo
的哈希键下的所有其他内容。例如,当使用 awesome_print gem 漂亮地打印您的哈希时,您将看到:
require 'awesome_print'
ap @summoner, indent: 2, index: false
{
"jimbo" => {
"id" => 12345678,
"name" => "Jimbo",
"profileIconId" => 1234,
"revisionDate" => 123456789012,
"summonerLevel" => 10
}
}
解决方案
要获得 name 键,您必须深入哈希。例如,您可以像这样使用 Hash#dig:
@summoner_name = @summoner.dig 'jimbo', 'name'
#=> "Jimbo"
如果您使用的是没有 Hash#dig 方法的较旧的 Ruby,那么您仍然可以通过如下指定子键来获取该值:
@summoner_name = @summoner['jimbo']['name']
#=> "Jimbo"
我正在玩 英雄联盟 的外部 API。到目前为止,我已经能够从 API 获得响应,其中 returns 一个 JSON 对象。
@test_summoner_name = ERB::Util.url_encode('Jimbo')
@url = "https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/#{@test_summoner_name}?api_key=#{RIOT_API_KEY}"
response = HTTParty.get(@url)
@summoner = JSON.parse(response.body)
@summoner_name = @summoner[:name]
JSON 对象如下所示:
{"jimbo"=>{"id"=>12345678, "name"=>"Jimbo", "profileIconId"=>1234, "revisionDate"=>123456789012, "summonerLevel"=>10}}
因此,我能够在我的视图中使用 @summoner 变量输出 JSON 对象。但是当我尝试输出我的 @summoner_name 变量时,我只得到一个空字符串。
供参考,这是我目前的看法:
Summoner Object: <%= @summoner %><br>
Summoner Name: <%= @summoner_name %>
如有任何帮助,我们将不胜感激。我现在一整天都在跌跌撞撞地完成这个过程。
如果您的 json 看起来像这样可能会有所帮助:
{"jimbo"=>{
"id"=>12345678,
"name"=>"Jimbo",
"profileIconId"=>1234,
"revisionDate"=>123456789012,
"summonerLevel"=>10}
}
那你就可以
@summoner_jimbo_name = @summoner['jimbo']['name']
获取值:
Jimbo
问题
您没有您认为的哈希值。一旦你解析了你的 JSON,你的 @summoner 实例变量实际上包含了包含在名为 jimbo
的哈希键下的所有其他内容。例如,当使用 awesome_print gem 漂亮地打印您的哈希时,您将看到:
require 'awesome_print'
ap @summoner, indent: 2, index: false
{
"jimbo" => {
"id" => 12345678,
"name" => "Jimbo",
"profileIconId" => 1234,
"revisionDate" => 123456789012,
"summonerLevel" => 10
}
}
解决方案
要获得 name 键,您必须深入哈希。例如,您可以像这样使用 Hash#dig:
@summoner_name = @summoner.dig 'jimbo', 'name'
#=> "Jimbo"
如果您使用的是没有 Hash#dig 方法的较旧的 Ruby,那么您仍然可以通过如下指定子键来获取该值:
@summoner_name = @summoner['jimbo']['name']
#=> "Jimbo"