【问题标题】:Access JSON value called "class" with Gson使用 Gson 访问名为“class”的 JSON 值
【发布时间】:2017-04-20 12:43:08
【问题描述】:

我正在尝试在以下 JSON 中获取类的值:

{    
    "battlegroup": "Misery",
    "class": 1,
    "race": 4,
    "gender": 0
}

我通过以下方式访问其他字段(battlegrouprace 等):

WoWDetails info = gson.fromJson(response, WoWDetails.class);
raceID = info.race;

魔兽详情如下:

class WoWDetails {
// character details
   public String battlegroup;
   public Integer achievementPoints;
   public Integer race;
   public Integer class;
}

但如果我尝试WoWDetails.class,它会给我一个错误,说“未知类:信息”。这是有道理的,因为 info 不是一个类。

有没有办法解决这个问题?我能以任何可能的方式逃避“阶级”这个词吗?

名称类不可编辑,因为它不是我的 API。

【问题讨论】:

标签: java android json gson


【解决方案1】:

您可以使用 @SerializedNameclass 字段映射到 JSON 键

WowDetails.java

public class WoWDetails {

    String battlegroup;

    @SerializedName("class")
    int className;

    int race;
    int gender;

}

【讨论】:

  • 谢谢,成功了!但另一个答案也是如此,我接受哪一个? 一般问题
  • 公平地说,这值得投票,因为这不是 jsonschema2pojo 复制/粘贴。
  • 始终接受解释答案的答案,以便您学习。
  • 好的,谢谢!他们都是很好的答案,第一个有更多的解释。但他们都为我工作。谢谢!
  • 我很惊讶这个答案没有被接受。
【解决方案2】:

设置你的包名

package com.nonprofit.nonprofit;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class WoWDetails {

    @SerializedName("battlegroup")
    @Expose
    private String battlegroup;
    @SerializedName("class")
    @Expose
    private Integer _class;
    @SerializedName("race")
    @Expose
    private Integer race;
    @SerializedName("gender")
    @Expose
    private Integer gender;

    public String getBattlegroup() {
        return battlegroup;
    }

    public void setBattlegroup(String battlegroup) {
        this.battlegroup = battlegroup;
    }

    public Integer getClass_() {
        return _class;
    }

    public void setClass_(Integer _class) {
        this._class = _class;
    }

    public Integer getRace() {
        return race;
    }

    public void setRace(Integer race) {
        this.race = race;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

}

您可以像下面这样获取您的详细信息

WoWDetails info = gson.fromJson(response, WoWDetails.class);

info.getGender();
info.getRace();

【讨论】:

  • “info.getClasses_”是否应该带有下划线?这样做的目的是什么?
  • 你将能够在 info.getClass_(); 中获得你的价值;
  • 你可以从这个网站jsonschema2pojo.org获取你的getter和setter
  • @R.Montanje class 是一个保留字,您认为它应该工作的方式会导致 Java 语法错误。
  • 是的,我注意到了,我只是需要一种解决方法,我明白了:)
猜你喜欢
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多