2016-05-11 17 views
0

Als Teil meiner Computer Science IA bin ich ein Tool erstellen, das Match-Geschichte und Details der Dota-Spiele liest und Statistiken und Held Stats generiert. Dazu habe ich auf die Ventil-API zugegriffen, ein paar Jons von Matches gegriffen und die Geschichte davon abgeglichen, dann habe ich sie etwas verkleinert, damit sie nur die Informationen enthalten, die ich im JSON brauche.Convert JSON in Java-Objekt mit Gson

Unten ist ein Beispiel der Details eines der Spiele in einem JSON-Format:

"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 
} 

ein IntelliJ Plugin Verwendung I 3 Java-Klassen erstellt haben, eins mit dem Spielergebnis, eine für die Details das Ergebnis, und ein für die Details der Spieler im Ergebnis, die jeweils mit den Variablen bekommen Sets in:

Testspiel Felder:

private TestMatchResult result; 

TestMatchResult Felder :

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 Felder:

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; 

Ich habe heruntergeladen und die Gson Bibliothek als Abhängigkeit in die IntelliJ Projekt hinzugefügt. Ich versuche, die JSON in die Java-Klassen als ein Objekt zu analysieren und möchte dies für alle Match-Jons tun, aber ich bin nicht ganz sicher, wie das im Moment zu tun ist, alles was ich habe ist:

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

Könnte jemand, der Gson besser versteht als ich selbst, mir ein wenig Anleitung geben, wie ich das JSON als Objekt für mehrere Match-Jons in die Klasse (n) zerlegen würde? Sobald ich das getan habe, ist der Rest von dem, was ich tun muss, einfach, da es nur darum geht, die Variablen zu nehmen und Berechnungen darauf auszuführen und sie dann anzuzeigen. Wenn es nicht möglich oder praktisch ist, kann ich eine Test-CSV erstellen und stattdessen lesen, da ich weiß, wie man sie benutzt, aber nur jsons finde, da die Ventil-API Anfragen in solcher Form zurückgibt, dass ich genauso gut lernen kann benutze sie.

Danke!

+1

hier sehen http://stackoverflow.com/questions/22685948/android-json-parsing-arrays-with-gson Oder hier http://Stackoverflow.com/a/22754230/5202007 für weitere Hilfe – Tauqir

+1

https://github.com/google/gson/blob/master/UserGuide.md beste Quelle von Informationen. Sie können auch http://www.jsonschema2pojo.org/ (oder die Idee, wie Sie bereits getan haben) verwenden, um pojo-Klassen und parce json string mit 'TestMatch myobj = new Gson(). FromJson (jsonString, TestMatch.class); ' – varren

Antwort

0

müssen Sie die Methode Gson.fromJson()

Beispiel verwenden:

public static void getMatch() 
{ 
    Gson gson = new Gson(); 
    TestMatch tm = gson.fromJson(jsonString, TestMatch.class); 
}