2016-05-11 8 views
0

私のコンピュータサイエンスIAの一環として、dotaの試合のマッチ履歴と詳細を読み込んで、統計とヒーローの統計情報を生成するツールを作成しています。これを行うために、私はバルブAPIにアクセスし、いくつかのjsonsのマッチとそれからのマッチ履歴を取得し、それらをわずかにカットして、jsonで必要な情報だけを含んでいます。jsonをgsonでjavaオブジェクトに変換する

以下

JSON形式での試合の一つの細部のサンプルです:私は3つのJavaクラス、試合結果に1、の詳細については、1を作成しているのIntelliJのプラグインを使用して

"result": { 
    "players": [ 
     { 
      "account_id": 40884464, 
      "player_slot": 0, 
      "hero_id": 31, 
      "kills": 8, 
      "deaths": 8, 
      "assists": 14, 
      "last_hits": 72, 
      "denies": 0, 
      "gold_per_min": 304, 
      "xp_per_min": 412, 
      "level": 18,   
     }, 
     { 
      "account_id": 70638797, 
      "player_slot": 1, 
      "hero_id": 35, 
      "kills": 6, 
      "deaths": 7, 
      "assists": 4, 
      "last_hits": 212, 
      "denies": 37, 
      "gold_per_min": 371, 
      "xp_per_min": 356, 
      "level": 17, 
     }, 
     { 
      "account_id": 76281087, 
      "player_slot": 2, 
      "hero_id": 5, 
      "kills": 3, 
      "deaths": 13, 
      "assists": 10, 
      "last_hits": 22, 
      "denies": 0, 
      "gold_per_min": 215, 
      "xp_per_min": 259, 
      "level": 14, 
     }, 
     { 
      "account_id": 4294967295, 
      "player_slot": 3, 
      "hero_id": 28, 
      "kills": 11, 
      "deaths": 11, 
      "assists": 11, 
      "last_hits": 166, 
      "denies": 18, 
      "gold_per_min": 413, 
      "xp_per_min": 485, 
      "level": 20, 
     }, 
     { 
      "account_id": 81692493, 
      "player_slot": 4, 
      "hero_id": 2, 
      "kills": 1, 
      "deaths": 9, 
      "assists": 7, 
      "last_hits": 135, 
      "denies": 8, 
      "gold_per_min": 261, 
      "xp_per_min": 314, 
      "level": 16, 
     }, 
     { 
      "account_id": 10101141, 
      "player_slot": 128, 
      "hero_id": 30, 
      "kills": 7, 
      "deaths": 8, 
      "assists": 25, 
      "last_hits": 90, 
      "denies": 2, 
      "gold_per_min": 382, 
      "xp_per_min": 421, 
      "level": 18, 

     }, 
     { 
      "account_id": 62101519, 
      "player_slot": 129, 
      "hero_id": 7, 
      "kills": 6, 
      "deaths": 8, 
      "assists": 20, 
      "last_hits": 305, 
      "denies": 0, 
      "gold_per_min": 556, 
      "xp_per_min": 585, 
      "level": 22, 
     }, 
     { 
      "account_id": 134700328, 
      "player_slot": 130, 
      "hero_id": 4, 
      "kills": 17, 
      "deaths": 2, 
      "assists": 13, 
      "last_hits": 335, 
      "denies": 16, 
      "gold_per_min": 729, 
      "xp_per_min": 724, 
      "level": 25, 
     }, 
     { 
      "account_id": 35357393, 
      "player_slot": 131, 
      "hero_id": 83, 
      "kills": 4, 
      "deaths": 4, 
      "assists": 23, 
      "last_hits": 16, 
      "denies": 4, 
      "gold_per_min": 318, 
      "xp_per_min": 407, 
      "level": 18, 
     }, 
     { 
      "account_id": 4294967295, 
      "player_slot": 132, 
      "hero_id": 101, 
      "kills": 13, 
      "deaths": 8, 
      "assists": 12, 
      "last_hits": 57, 
      "denies": 3, 
      "gold_per_min": 390, 
      "xp_per_min": 405, 
      "level": 18, 
     } 
    ] 
    , 
    "radiant_win": false, 
    "duration": 2682, 
    "start_time": 1461781997, 
    "match_id": 2324299045, 
    "match_seq_num": 2036251155, 
    "cluster": 133, 
    "game_mode": 1, 
    "flags": 0, 
    "engine": 1, 
    "radiant_score": 30, 
    "dire_score": 48 
} 

TestMatchフィールド:

private TestMatchResult result; 

TestMatchResultフィールドの結果は、結果内の選手の詳細については、一つには、変数とそれぞれにセットを取得します:

private int duration; 
private int start_time; 
private int cluster; 
private boolean radiant_win; 
private int match_seq_num; 
private int engine; 
private TestMatchResultPlayers[] players; 
private long match_id; 
private int dire_score; 
private int flags; 
private int game_mode; 
private int radiant_score; 

TestMatchResultPlayersフィールド:

private int kills; 
private int gold_per_min; 
private int last_hits; 
private int account_id; 
private int assists; 
private int level; 
private int player_slot; 
private int xp_per_min; 
private int hero_id; 
private int denies; 
private int deaths; 

私がダウンロードされ、IntelliJのプロジェクトに依存関係としてgsonライブラリを追加しました。 私はオブジェクトとしてJavaクラスにjsonを解析しようとしていますが、すべてのマッチjsonsのためにそれをしたいと思いますが、私はその時点でそれを行う方法についてはあまりよく分かりません:

public static void getMatch() 
{ 
    Gson gson = new Gson(); 
} 

gsonを自分自身よりよく理解している人が、jsonをいくつかのmatch jsonsのオブジェクトとしてクラスに構文解析する方法について少し教えていただけますか?私がやったことは、変数をとり、計算を実行して表示するというケースだけなので、残りの部分は簡単です。それが可能でないか実用的でない場合は、テスト用のCSVを作成し、代わりにそれを使用する方法を知っていますが、バルブAPIが要求を返すものとしてjsonsだけを参照するだけですそれらを使用してください。

ありがとうございます!

+1

はここhttp://stackoverflow.com/questions/22685948/android-json-parsing-arrays-with-gsonまたは、こちらをご覧ください詳細については、http://stackoverflow.com/a/22754230/5202007 – Tauqir

+1

https://github.com/google/gson/blob/master/UserGuide.mdベストソースを参照してください。また、http://www.jsonschema2pojo.org/(または既に完成したアイデア)を使って、pojoクラスを作成し、 'TestMatch myobj = new Gson()。fromJson(jsonString、TestMatch.class);でjson文字列を解析することもできます。 ' – varren

答えて

0

あなたが方法Gson.fromJson()

例を使用する必要があります。

public static void getMatch() 
{ 
    Gson gson = new Gson(); 
    TestMatch tm = gson.fromJson(jsonString, TestMatch.class); 
} 
関連する問題