0

私は現在 API パーサーを作成しており、データを適切にフォーマットする作業を行っています。

これまでのところ、次のコードがあります。

data.each {|season| episodes[season["no"].to_i] = season["episode"].group_by{|i| i["seasonnum"].to_i}}

ただし、これに関する唯一の問題は、出力が次のようになることです。

8 => {
     1 => [
        [0] {
                "epnum" => "150",
            "seasonnum" => "01",
              "prodnum" => "3X7802",
              "airdate" => "2012-10-03",
                 "link" => "http://www.tvrage.com/Supernatural/episodes/1065195189",
                "title" => "We Need to Talk About Kevin"
        }
    ],
     2 => [
        [0] {
                "epnum" => "151",
            "seasonnum" => "02",
              "prodnum" => "3X7803",
              "airdate" => "2012-10-10",
                 "link" => "http://www.tvrage.com/Supernatural/episodes/1065217045",
                "title" => "What's Up, Tiger Mommy?"
        }
    ]
}

したがって、セカンダリ ハッシュの各値には冗長な配列があります。この配列を削除して、内側のハッシュだけを取得するにはどうすればよいですか? だから、例えば私が欲しい:

8 => {
     1 => {
                "epnum" => "150",
            "seasonnum" => "01",
              "prodnum" => "3X7802",
              "airdate" => "2012-10-03",
                 "link" => "http://www.tvrage.com/Supernatural/episodes/1065195189",
                "title" => "We Need to Talk About Kevin"
        }
    ,

編集:完全なファイルは次のとおりです。

require 'httparty'
require 'awesome_print'
require 'debugger'
require 'active_support'

episodes = Hash.new{ [] }
response = HTTParty.get('http://services.tvrage.com/feeds/episode_list.php?sid=5410')
data = response.parsed_response['Show']['Episodelist']["Season"]

data.each { |season|
  episodes[season["no"].to_i] = season["episode"].group_by{ |i|
    i["seasonnum"].to_i
  }
}

ap episodes

入力データ: http://services.tvrage.com/feeds/episode_list.php?sid=5410

4

2 に答える 2

0

当てずっぽう:

data.each { |season|
  episodes[season["no"].to_i] = season["episode"].group_by{ |i|
    i["seasonnum"].to_i
  }.first
}
于 2013-02-07T20:53:41.037 に答える
0

index_by (キーごとに 1 つのエントリ) が本当に必要なときに、group_by (同じキーを持つエントリの配列) を使用しているようです。

data.each {|season| episodes[season["no"].to_i] = season["episode"].index_by {|i| i["seasonnum"].to_i}}

注: 同じシーズン番号で複数のエピソードを作成できる場合は、group by を使用して、ここに値の配列を指定する必要があります。便利なルックアップ (1 対 1 のマッピング) を使用してエピソードのハッシュを作成するだけの場合は、index_by が必要です。

于 2013-02-07T20:56:17.373 に答える