【问题标题】:Convert json to java object with gson使用 gson 将 json 转换为 java 对象
【发布时间】:2016-05-11 10:00:43
【问题描述】:

作为我的计算机科学 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 并从中读取,因为我知道如何使用它们,但只是遇到 jsons,因为这是阀门 API 返回请求的内容,所以我不妨学习如何使用它们。

谢谢!

【问题讨论】:

标签: java json gson


【解决方案1】:

你需要使用Gson.fromJson()的方法

示例:

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

【讨论】:

    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多