2

特定のテレビ番組のデータを取得し、詳細を含む JSON 応答を返す Java プログラムがあります。私の問題は、JSON 応答を解析して特定のキーと値のペア、つまりそのエピソードの放送日を示す「first_aired_iso」文字列を取得することです。

API を呼び出す URL は次のとおりです。

String api_url = "http://api.trakt.tv/show/season.json/<api-key>/the-walking-dead/1";

そして、これが対応する JSON 応答です


![ { "season":1, "episode":1, "number":1, "tvdb_id":2493011, "title":"Days Gone Bye", "overview":"Rick searches for his family after emerging from a coma into a world terrorized by the walking dead. Morgan and Duane, whom he meets along the way, help teach Rick the new rules for survival.", "first_aired":1288584000, "first_aired_iso":"2010-10-31T21:00:00-05:00", "first_aired_utc":1288598400, "url":"http://trakt.tv/show/the-walking-dead/season/1/episode/1", "screen":"http://slurm.trakt.us/images/episodes/124-1-1.22.jpg", "images":{ "screen":"http://slurm.trakt.us/images/episodes/124-1-1.22.jpg" }, "ratings":{ "percentage":89, "votes":763, "loved":733, "hated":30 }, "watched":true, "in_collection":true, "in_watchlist":false, "rating":false, "rating_advanced":0 }, { "season":1, "episode":2, "number":2, "tvdb_id":2493181, "title":"Guts", "overview":"Rick unknowingly causes a group of survivors to be trapped by walkers. The group dynamic devolves from accusations to violence, as Rick must confront an enemy far more dangerous than the undead.", "first_aired":1289192400, "first_aired_iso":"2010-11-07T21:00:00-06:00", "first_aired_utc":1289210400, "url":"http://trakt.tv/show/the-walking-dead/season/1/episode/2", "screen":"http://slurm.trakt.us/images/episodes/124-1-2.22.jpg", "images":{ "screen":"http://slurm.trakt.us/images/episodes/124-1-2.22.jpg" }, "ratings":{ "percentage":87, "votes":533, "loved":507, "hated":26 }, "watched":true, "in_collection":true, "in_watchlist":false, "rating":false, "rating_advanced":0 }, { "season":1, "episode":3, "number":3, "tvdb_id":2656081, "title":"Tell It to the Frogs", "overview":"After returning to the camp with the department store survivors and an emotional reunion with his wife and son, Rick decides to go against Shane's advice and go back to Atlanta for Merle Dixon and his dropped bag of guns accompanied by Merle's younger brother, Darryl Dixon, as well as Glenn and T-Dog.", "first_aired":1289797200, "first_aired_iso":"2010-11-14T21:00:00-06:00", "first_aired_utc":1289815200, "url":"http://trakt.tv/show/the-walking-dead/season/1/episode/3", "screen":"http://slurm.trakt.us/images/episodes/124-1-3.22.jpg", "images":{ "screen":"http://slurm.trakt.us/images/episodes/124-1-3.22.jpg" }, "ratings":{ "percentage":85, "votes":484, "loved":458, "hated":26 }, "watched":true, "in_collection":true, "in_watchlist":false, "rating":false, "rating_advanced":0 }, { "season":1, "episode":4, "number":4, "tvdb_id":2656091, "title":"Vatos", "overview":"While still in search of Merle, the group tries to retrieve the bag of guns but are attacked by several living men who are also after the weapons. The group manages to grab the injured attacker; however, several of the attackers escape and take Glenn hostage. Back at camp a large group of walkers venture up the hill and take the survivors by surprise.", "first_aired":1290402000, "first_aired_iso":"2010-11-21T21:00:00-06:00", "first_aired_utc":1290420000, "url":"http://trakt.tv/show/the-walking-dead/season/1/episode/4", "screen":"http://slurm.trakt.us/images/episodes/124-1-4.22.jpg", "images":{ "screen":"http://slurm.trakt.us/images/episodes/124-1-4.22.jpg" }, "ratings":{ "percentage":88, "votes":490, "loved":467, "hated":23 }, "watched":true, "in_collection":true, "in_watchlist":false, "rating":false, "rating_advanced":0 }, { "season":1, "episode":5, "number":5, "tvdb_id":2656101, "title":"Wildfire", "overview":"Rick leads the group to the CDC after the attack on the camp. Jim must make a terrible life and death decision.", "first_aired":1291006800, "first_aired_iso":"2010-11-28T21:00:00-06:00", "first_aired_utc":1291024800, "url":"http://trakt.tv/show/the-walking-dead/season/1/episode/5", "screen":"http://slurm.trakt.us/images/episodes/124-1-5.22.jpg", "images":{ "screen":"http://slurm.trakt.us/images/episodes/124-1-5.22.jpg" }, "ratings":{ "percentage":87, "votes":460, "loved":443, "hated":17 }, "watched":true, "in_collection":true, "in_watchlist":false, "rating":"love", "rating_advanced":10 }, { "season":1, "episode":6, "number":6, "tvdb_id":2656111, "title":"TS-19", "overview":"Rick and the group are allowed into the CDC by a strange doctor, but all is not what it seems in their newfound haven. ", "first_aired":1291611600, "first_aired_iso":"2010-12-05T21:00:00-06:00", "first_aired_utc":1291629600, "url":"http://trakt.tv/show/the-walking-dead/season/1/episode/6", "screen":"http://slurm.trakt.us/images/episodes/124-1-6.22.jpg", "images":{ "screen":"http://slurm.trakt.us/images/episodes/124-1-6.22.jpg" }, "ratings":{ "percentage":87, "votes":465, "loved":440, "hated":25 }, "watched":true, "in_collection":true, "in_watchlist":false, "rating":"love", "rating_advanced":10 } ]


お分かりのとおり、各エピソードの「first_aired_iso」のキー値を抽出する必要があるだけです。

これを行うための私のコードは次のとおりです

        String s = response.toString();
        Gson gson = new Gson();
        String jsonstr = gson.toJson(s);
        System.out.println(jsonstr);
        JsonArray json = JsonArray.readFrom(jsonstr);
        for (int i = 0; i < 15; i++) {
            System.out.println(json.get(i).asString());
        }

問題は、生の JSON 出力を出力した後、まったく応答がないことです。全然ループに入らない。

参考までに、http://eclipsesource.com/blogs/2013/04/18/minimal-json-parser-for-java/を確認してください。

4

2 に答える 2

1

私の解決策:

public static void main(String[] args) {
    String json = "[ { \"season\":1, \"episode\":1, \"number\":1, \"tvdb_id\":2493011, \"title\":\"Days Gone Bye\", \"overview\":\"Rick searches for his family after emerging from a coma into a world terrorized by the walking dead. Morgan and Duane, whom he meets along the way, help teach Rick the new rules for survival.\", \"first_aired\":1288584000, \"first_aired_iso\":\"2010-10-31T21:00:00-05:00\", \"first_aired_utc\":1288598400, \"url\":\"http://trakt.tv/show/the-walking-dead/season/1/episode/1\", \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-1.22.jpg\", \"images\":{ \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-1.22.jpg\" }, \"ratings\":{ \"percentage\":89, \"votes\":763, \"loved\":733, \"hated\":30 }, \"watched\":true, \"in_collection\":true, \"in_watchlist\":false, \"rating\":false, \"rating_advanced\":0 }, { \"season\":1, \"episode\":2, \"number\":2, \"tvdb_id\":2493181, \"title\":\"Guts\", \"overview\":\"Rick unknowingly causes a group of survivors to be trapped by walkers. The group dynamic devolves from accusations to violence, as Rick must confront an enemy far more dangerous than the undead.\", \"first_aired\":1289192400, \"first_aired_iso\":\"2010-11-07T21:00:00-06:00\", \"first_aired_utc\":1289210400, \"url\":\"http://trakt.tv/show/the-walking-dead/season/1/episode/2\", \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-2.22.jpg\", \"images\":{ \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-2.22.jpg\" }, \"ratings\":{ \"percentage\":87, \"votes\":533, \"loved\":507, \"hated\":26 }, \"watched\":true, \"in_collection\":true, \"in_watchlist\":false, \"rating\":false, \"rating_advanced\":0 }, { \"season\":1, \"episode\":3, \"number\":3, \"tvdb_id\":2656081, \"title\":\"Tell It to the Frogs\", \"overview\":\"After returning to the camp with the department store survivors and an emotional reunion with his wife and son, Rick decides to go against Shane's advice and go back to Atlanta for Merle Dixon and his dropped bag of guns accompanied by Merle's younger brother, Darryl Dixon, as well as Glenn and T-Dog.\", \"first_aired\":1289797200, \"first_aired_iso\":\"2010-11-14T21:00:00-06:00\", \"first_aired_utc\":1289815200, \"url\":\"http://trakt.tv/show/the-walking-dead/season/1/episode/3\", \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-3.22.jpg\", \"images\":{ \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-3.22.jpg\" }, \"ratings\":{ \"percentage\":85, \"votes\":484, \"loved\":458, \"hated\":26 }, \"watched\":true, \"in_collection\":true, \"in_watchlist\":false, \"rating\":false, \"rating_advanced\":0 }, { \"season\":1, \"episode\":4, \"number\":4, \"tvdb_id\":2656091, \"title\":\"Vatos\", \"overview\":\"While still in search of Merle, the group tries to retrieve the bag of guns but are attacked by several living men who are also after the weapons. The group manages to grab the injured attacker; however, several of the attackers escape and take Glenn hostage. Back at camp a large group of walkers venture up the hill and take the survivors by surprise.\", \"first_aired\":1290402000, \"first_aired_iso\":\"2010-11-21T21:00:00-06:00\", \"first_aired_utc\":1290420000, \"url\":\"http://trakt.tv/show/the-walking-dead/season/1/episode/4\", \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-4.22.jpg\", \"images\":{ \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-4.22.jpg\" }, \"ratings\":{ \"percentage\":88, \"votes\":490, \"loved\":467, \"hated\":23 }, \"watched\":true, \"in_collection\":true, \"in_watchlist\":false, \"rating\":false, \"rating_advanced\":0 }, { \"season\":1, \"episode\":5, \"number\":5, \"tvdb_id\":2656101, \"title\":\"Wildfire\", \"overview\":\"Rick leads the group to the CDC after the attack on the camp. Jim must make a terrible life and death decision.\", \"first_aired\":1291006800, \"first_aired_iso\":\"2010-11-28T21:00:00-06:00\", \"first_aired_utc\":1291024800, \"url\":\"http://trakt.tv/show/the-walking-dead/season/1/episode/5\", \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-5.22.jpg\", \"images\":{ \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-5.22.jpg\" }, \"ratings\":{ \"percentage\":87, \"votes\":460, \"loved\":443, \"hated\":17 }, \"watched\":true, \"in_collection\":true, \"in_watchlist\":false, \"rating\":\"love\", \"rating_advanced\":10 }, { \"season\":1, \"episode\":6, \"number\":6, \"tvdb_id\":2656111, \"title\":\"TS-19\", \"overview\":\"Rick and the group are allowed into the CDC by a strange doctor, but all is not what it seems in their newfound haven. \", \"first_aired\":1291611600, \"first_aired_iso\":\"2010-12-05T21:00:00-06:00\", \"first_aired_utc\":1291629600, \"url\":\"http://trakt.tv/show/the-walking-dead/season/1/episode/6\", \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-6.22.jpg\", \"images\":{ \"screen\":\"http://slurm.trakt.us/images/episodes/124-1-6.22.jpg\" }, \"ratings\":{ \"percentage\":87, \"votes\":465, \"loved\":440, \"hated\":25 }, \"watched\":true, \"in_collection\":true, \"in_watchlist\":false, \"rating\":\"love\", \"rating_advanced\":10 } ]";
    ArrayList<Map> al = new Gson().fromJson(json, ArrayList.class);
    for(Map m : al){
        System.out.printf("Ep. %.0f aired on %s\n", m.get("episode"),  m.get("first_aired_iso"));
    }
}

これは実行です:

1 aired on 2010-10-31T21:00:00-05:00
2 aired on 2010-11-07T21:00:00-06:00
3 aired on 2010-11-14T21:00:00-06:00
4 aired on 2010-11-21T21:00:00-06:00
5 aired on 2010-11-28T21:00:00-06:00
6 aired on 2010-12-05T21:00:00-06:00

常に Gson に作業を任せる必要があります。この場合、オブジェクト (マップ) のリストがあります。そのため、Gson にその方法でデシリアライズし、汎用の for ループとマップ アクセスを使用して構造体にアクセスするように指示します。

于 2013-11-06T23:30:40.323 に答える
0
String s = response.toString();
JsonArray json = JsonArray.readFrom(s);
for (int i = 0; i < json.size(); i++) {
    JsonObject show = json.get(i).asObject();
    int episode = show.get("episode").asInt();
    String time = show.get("first_aired_iso").asString();
    System.out.println("Episode " + episode + " - " + time);
}

どうもありがとうホットリックス!:)

于 2013-11-06T20:21:04.197 に答える