2016-05-11 19 views
0

Как часть моей компьютерной науки IA Я создаю инструмент, который читает историю совпадения и детали игр dota и генерирует статистику и статистику героя. Для этого я получил доступ к API-интерфейсу клапана и схватил несколько jsons совпадений и сопоставил историю с ним, затем немного сократил их, чтобы они содержали только информацию, которая мне нужна в json.Преобразование json в java-объект с gson

Ниже приведен пример из деталей одного из матчей в формате JSON:

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

Используя плагин IntelliJ я создал 3 Java-классы, один с результатом матча, один для деталей результат, и один для детализацию игроков в результате, каждый с переменными получает наборы в:

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; 

Я скачал и добавил библиотеку gson как зависимость в проект IntelliJ. Я пытаюсь разобрать json в классы java как объект и хотел бы сделать это для всех jsons-совпадений, однако я не совсем уверен, как это сделать на данный момент, все, что у меня есть:

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

Может ли кто-то, кто понимает gson лучше меня, дал мне немного указания относительно того, как я буду разбирать этот json в классе (-ах) как объект для нескольких jsons-совпадений? Как только я это сделал, остальное, что мне нужно сделать, легко, так как это всего лишь случай принятия переменных и выполнения вычислений на них, а затем их отображения. Если это невозможно или практично, я могу сделать тестовый CSV и читать из этого вместо этого, поскольку я знаю, как их использовать, но только натолкнуться на jsons, поскольку это то, что API API API возвращает запросы, так что я могу также узнать, как используй их.

Спасибо!

+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 и parse json string с помощью 'TestMatch myobj = new Gson(). FromJson (jsonString, TestMatch.class); ' – varren

ответ

0

вам нужно использовать метод Gson.fromJson()

Пример:

public static void getMatch() 
{ 
    Gson gson = new Gson(); 
    TestMatch tm = gson.fromJson(jsonString, TestMatch.class); 
} 
Смежные вопросы