繁体   English   中英

用gson将json转换为java对象

[英]Convert json to java object with gson

作为我的计算机科学IA的一部分,我正在创建一个工具来读取比赛历史记录和Dota游戏的详细信息,并生成统计信息和英雄统计信息。 为此,我已经访问了Valve API,并从中获取了一些匹配的json和匹配历史记录,然后将其略微缩小,以便它们仅包含json中我需要的信息。

以下是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类,并希望对所有匹配的json都执行此操作,但是目前我不确定如何执行此操作,我所拥有的只是:

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

谁能比我自己更了解gson的人能给我一些指导,说明我如何将json解析为多个匹配json的对象的类? 一旦完成,剩下的事情就很容易了,因为这只是获取变量并对其进行计算然后显示它们的一种情况。 如果不可能或不可行,我可以制作一个测试CSV并从中读取,因为我知道如何使用它们,但是只能遇到json,因为这是Valve API返回请求的方式,所以我可能还想学习如何使用它们。

谢谢!

您需要使用方法Gson.fromJson()

例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM