【问题标题】:How to convert a JSON String to a JSON Object (Gson) in Java?如何在 Java 中将 JSON 字符串转换为 JSON 对象 (Gson)?
【发布时间】:2018-04-23 22:26:24
【问题描述】:

我正在使用一个外部 API,其响应正文是 JSON 格式的字符串。我正在使用Gson 将字符串解析为 JSON 对象。但是,尝试在浏览器中显示对象时出现以下错误。

语法错误:JSON.parse:第 1 行第 1 列的意外字符 JSON 数据

这是我的代码:

控制器

    @RequestMapping("/player")
public JsonArray displayPlayer() throws Exception{


    String player = "PacSnackz";

    smite.createSession();

    String test = smite.getPlayer(player);

    JsonArray playerObj = new JsonParser().parse(test).getAsJsonArray();

    return playerObj;

}

惩戒类

      public String getPlayer(String player) throws Exception {
        if (!isSessionValid() && !createSession()) return "session null";
        return getURL(combine(new String[] {
                baseURL + "getplayer" + responseFormat,
                devID,
                getSignature("getplayer"),
                sessionID,
                getTimestamp(),
                player
        }, "/"));
}

这是 JSON 字符串的样子:

JSON 字符串

[{"Avatar_URL":"","Created_Datetime":"8\/16\/2016 4:30:14 AM","Id":9993055,"Last_Login_Datetime":"4\/23\/2018 8:47:56 PM","Leaves":3,"Level":17,"Losses":19,"MasteryLevel":1,"Name":"PacSnackz","Personal_Status_Message":"","Rank_Stat_Conquest":0,"Rank_Stat_Duel":0,"Rank_Stat_Joust":0,"RankedConquest":{"Leaves":0,"Losses":0,"Name":"League","Points":0,"PrevRank":0,"Rank":0,"Rank_Stat_Conquest":null,"Rank_Stat_Duel":null,"Rank_Stat_Joust":null,"Season":0,"Tier":0,"Trend":0,"Wins":0,"player_id":null,"ret_msg":null},"RankedDuel":{"Leaves":0,"Losses":0,"Name":"Duel","Points":0,"PrevRank":0,"Rank":0,"Rank_Stat_Conquest":null,"Rank_Stat_Duel":null,"Rank_Stat_Joust":null,"Season":0,"Tier":0,"Trend":0,"Wins":0,"player_id":null,"ret_msg":null},"RankedJoust":{"Leaves":0,"Losses":0,"Name":"Joust","Points":0,"PrevRank":0,"Rank":0,"Rank_Stat_Conquest":null,"Rank_Stat_Duel":null,"Rank_Stat_Joust":null,"Season":0,"Tier":0,"Trend":0,"Wins":0,"player_id":null,"ret_msg":null},"Region":"North America","TeamId":0,"Team_Name":"","Tier_Conquest":0,"Tier_Duel":0,"Tier_Joust":0,"Total_Achievements":28,"Total_Worshippers":510,"Wins":35,"ret_msg":null}]

我正在使用 Spring Boot Java 和 Google 的 Gson 库。我也调查过杰克逊,也没有运气。

【问题讨论】:

  • 我不确定 JSON Array 是否被普遍认为是有效的 JSON 根对象。我可以看到 Gson 库如何认为您的 JSON 字符串无效。

标签: java json rest spring-boot


【解决方案1】:

我想出了答案。诀窍是将 Player 设置为一个数组。对于其他对象,我使用 for 循环返回多个对象。在本例中,它设置为 0,因为只有一名玩家。

@RequestMapping("/player")
public Player displayPlayer() throws Exception{


    String player = "PacSnackz";

    smite.createSession();

    String test = smite.getPlayer(player);

    Gson gson = new Gson();

    Player[] playerObj = gson.fromJson(test, Player[].class);

    return playerObj[0];



}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 2013-05-19
    • 1970-01-01
    • 2017-01-24
    • 2017-08-11
    • 2018-01-20
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多