railsのRakefileでとあるサッカー系のwebAPIをrubyで叩くと以下の様なレスポンスが返ってきました。
#1 res = "{\"api\":{\"results\":380,\"fixtures\" :{\"65\":{\"fixture_id\":\"65\",\"event_timestamp\":\"1533927600\",\"event_date\" :\"2018-08-10T19:00:00+00:00\",\"league_id\" :\"2\",\"round\" :\"Premier League - 1\",\"homeTeam_id\":\"33\",\"awayTeam_id\": ......
このオブジェクトのクラスがStringクラスでスラッシュも邪魔なので、配列に直そうと思い以下のネットに落ちていた以下のコードを書きました
arr =res.body.split(',').map { |m| m.delete('[]"\\')}
そしてターミナルで実行して見たら以下の様な形になりました。
#2 {api:{results:380fixtures:{ 65:{ fixture_id:65 event_timestamp:1533927600 event_date:2018-08-10T19:00:00+00:00 league_id:2 round:Premier League - 1 . .省略 secondHalfStart:1533990780} 67:{fixture_id:67 event_timestamp:1533996000 event_date:2018-08-11T14:00:00+00:00 league_id:2 round:Premier League - 1 homeTeam_id:35 awayTeam_id:43 . .省略 secondHalfStart:0}}}}
この多次元配列になっているデータの値(fixture_id以降)を各々をデータベースに入れたいです。
しかし整形後のクラス確認したらArrayクラスとなっていたので、Arrayクラスのメソッドを実行したのですが、何故か値が取れません。
具体的にはこのarrに対して、arr.assoc('api')の様にassocメソッドを使っていって
65:{ fixture_id:65 event_timestamp:1533927600 event_date:2018-08-10T19:00:00+00:00 . .
この形までに持っていき、popメソッドやshiftメソッドを用い数字を消した後、
テーブル名.create(fixture_id: ブロック変数名['fixture_id'].......)
としてレコードに値を入れていくつもりでした。
しかし、何故かassocメソッドを使うと、値が全て消えて(ターミナルに表示されない)しまいます。
何故この様なことが起きているかが分かりません。
そもそもなのですが、個人的には#2を
65=>[fixture_id=>65
の様にハッシュに直してメソッドを実行しようとしてたのですが、
.to_h
メソッドを実行すると TypeError: wrong element type String at 0 (expected array)
とエラーが出た為、#2のままやっても変わらないだろうと思いメソッドを実行しました。
また#1を配列に直し方もまずいのではと感じており、ターミナルの仕様かはわからないのですが、"2のバリューとその次のキーの間にカンマ区切りがないことも気になっています。
理想としては
[
[fixture_id=>65,
event_timestamp=>1533927600,
event_date=>2018-08-10T19:00:00+00:00
..]]
この様な配列の中にハッシュが入っている形に持っていくことだったのですが。。。
長くなってしまいましたが、どの様にしたら#1の様な文字列を例に最後にあげた様な配列の形に持っていけるでしょうか?
またその他の方法でもどの様にしたら綺麗に欲しい値を取ってこれる状態にできるでしょうか。
非常に悩んでいます。質問が散在して申し訳ないですが宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/17 21:10