2015-04-02 44 views
-1

我需要解析一个对我来说太复杂的Json数组。几天来我一直在尝试没有成功。如果anyoboby能帮助我,我会非常感激。 乔恩是:用导轨解析json

http://ergast.com/api/f1/2014/driverStandings.json

而我想做的看法是一样的东西:

1汉密尔顿奔驰384

需要它来访问不同的对象,即时得到疯了。

谢谢!

+2

你尝试过什么?解析JSON与'require'json'一样简单; data = JSON.parse(string)'。你究竟在哪里卡住? – Amadan 2015-04-02 01:43:26

+0

嗨,我已经尝试了在导轨指南中解释的解决方案。 http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-from_json – 2015-04-02 17:20:36

回答

4

使用open-uri打开并读取远程文件,然后用json解析它。你必须深入挖掘的结果散列去的司机积分榜:

require 'open-uri' 
require 'json' 

url = "http://ergast.com/api/f1/2014/driverStandings.json" 
data = JSON.parse(open(url).read) 
standings = data['MRData']['StandingsTable']['StandingsLists'][0]['DriverStandings'] 
standings.each do |driver| 
    puts [driver['position'], driver['Driver']['givenName'], driver['Driver']['familyName'], driver['Constructors'][0]['name'], driver['points']].join(' ') 
end 

输出:

所有的
1 Lewis Hamilton Mercedes 384 
2 Nico Rosberg Mercedes 317 
3 Daniel Ricciardo Red Bull 238 
4 Valtteri Bottas Williams 186 
5 Sebastian Vettel Red Bull 167 
6 Fernando Alonso Ferrari 161 
7 Felipe Massa Williams 134 
8 Jenson Button McLaren 126 
9 Nico Hülkenberg Force India 96 
10 Sergio Pérez Force India 59 
11 Kevin Magnussen McLaren 55 
12 Kimi Räikkönen Ferrari 55 
13 Jean-Éric Vergne Toro Rosso 22 
14 Romain Grosjean Lotus F1 8 
15 Daniil Kvyat Toro Rosso 8 
16 Pastor Maldonado Lotus F1 2 
17 Jules Bianchi Marussia 2 
18 Adrian Sutil Sauber 0 
19 Marcus Ericsson Caterham 0 
20 Esteban Gutiérrez Sauber 0 
21 Max Chilton Marussia 0 
22 Kamui Kobayashi Caterham 0 
23 Will Stevens Caterham 0 
24 André Lotterer Caterham 0 
+0

我更正了变量名称。它应该被称为'url'。定期从JSON中获取信息并将其存储在数据库中可能会更好,您可以将其检索以供显示。 – infused 2015-04-02 17:33:02

+0

我已经用不同的评论回答了你,我不能在这里做。非常感谢! – 2015-04-02 17:44:06

+0

我从2天开始就挣扎着,我什么也看不见。你有任何想法如何将其存储在数据库中? – 2015-04-02 19:12:11

0

首先,thak你了。在我编辑我的评论的时候你纠正了代码。我之前尝试的是试图存储在我的数据库中。该代码是像.... 响应= HTTParty.get( 'http://ergast.com/api/f1/2014/driverStandings.json') 结果= JSON.parse(response.body) #导致= Steam.getAll()

@members = Array.new 
result.each do |member| 
@new_member = Member.new 
@new_member.from_json(member.to_json) 
@members << @new_member 

Im去看看如何将它存储在我的数据库中。我想第一个明显的步骤是创建一个具有相同结构的模型。

0

这是我现在的代码:

def index 
require 'open-uri' 
require 'json' 

@member = Member.new 
url = "http://ergast.com/api/f1/2014/driverStandings.json" 
data = JSON.parse(open(url).read) 
standings = data['MRData']['StandingsTable']['StandingsLists'][0]['DriverStandings'] 
standings.each do |driver| 
    @member.position = driver['position'] 
    @member.givenName = driver['Driver']['givenName'] 
    @member.familyName = driver['Driver']['familyName'] 
    @member.constructor = driver['Constructors'][0]['name'] 
    @member.points = driver['points'] 
end 
    @members = Member.all 
    end 
end 

***It doesn´t store anything and neither show in the view, which it is somehing like: 

<% @members.each do |member| %> 
    <tr> 
    ............. 
    <td><%= @member.position%> </td> 
    </tr> 
<% end %>