JSON :: ParserError 757意外的令牌

时间:2015-08-19 15:25:55

标签: ruby-on-rails ruby json steam

关于我正在做什么的一些背景知识。我正在尝试创建一个应用程序来增加我的编码组合,但我不能让这个应用程序与我合作。我遵循了部分指南,特别是将Steam OpenID / Omniuath与Ruby on Rails集成,因为它使用POST而没有CSRF令牌.... yadda yadda yadda。 Anyhoo,我到目前为止要做的就是通过Steam登录,就在这一刻,玩家拥有的游戏列表将会显示。然而,它不适合我。我的代码在我的控制器下面。

    class WelcomeController < ApplicationController
  skip_before_filter :verify_authenticity_token, :only => :auth_callback
  def index
    @gameslibrary = []
    if session.key? :current_user
    url = URI.parse("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=#{ENV['STEAM_WEB_API_KEY']}&account_id=#{session[:current_user][:uid]}")
    res = Net::HTTP::get(url)
    @gameslibrary = JSON.parse(res)['game_count']['app_id']['name']['playtime_forever'] || []
  end
end
  def auth_callback
      auth = request.env['omniauth.auth']
      session[:current_user] = { :nickname => auth.info['nickname'],
                                            :image => auth.info['image'],
                                            :uid => auth.uid }
      redirect_to root_url
    end
end

这是我的观看代码

<h1>Welcome#index</h1>
<%= link_to image_tag("http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_large_noborder.png"), '/auth/steam' %>
<% if session.key? :current_user %>
<h3>Current User:</h3>
<%= image_tag session[:current_user][:image] %>
<p><%= session[:current_user][:nickname] %></p>
<p><%= session[:current_user][:uid] %> </p>
<% end %>
<ul>
  <% @gameslibrary.each do |game| %>
  <li><%= puts game %></li>
  <% end %>
</ul>

我的JSON解析返回以下

757: unexpected token at '<html> <head> <title>500 Internal Server Error</title> </head> <body> <h1>Internal Server Error</h1> </body> </html>'

现在Steam Web API支持JSON输出。 JSON解析后的那些项是数组中数组/项的实际名称。我在这做错了什么?为了获得更多帮助,我如何将数组中的JSON解析数据转换为哈希? (或者这是自动的吗?)我是大部分的新手,这是我第一次使用自己的应用程序。我正在使用Steam Web API中的GetOwnedGamesv0001,如果有人想看的话。

1 个答案:

答案 0 :(得分:0)

问题肯定是响应,这是一个无效的JSON,你可以做什么首先将此代码移动到模型,然后检查你从尝试发送请求的URL获得的响应代码,如果它不同于200不要尝试JSON.parse响应,因为你会得到你现在得到的错误。

做类似的事情:

url =      URI.parse("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=#{ENV['STEAM_WEB_API_KEY']}&account_id=#{session[:current_user][:uid]}")

if Net::HTTP.get_response(url).kind_of? Net::HTTPSuccess
  @gameslibrary = JSON.parse(Net::HTTP::get(url))['game_count']['app_id']['name']['playtime_forever'] || []
else
  ... raise or log or something ...
end