使用GSON解析包含包含所需字符串

时间:2018-06-17 02:13:08

标签: java json gson

首先,这是我要解析的项目。现在,我试图从这个JSON获取“name”键的值。我在使用GSON获取其他必要变量时没有遇到任何问题,但这个变量要比那些变量要复杂得多。

 "types": [
        {
            "slot": 2,
            "type": {
                "url": "https://www.pokeapi.co/api/v2/type/4/",
                "name": "poison"
            }
        },
        {
            "slot": 1,
            "type": {
                "url": "https://www.pokeapi.co/api/v2/type/12/",
                "name": "grass"
            }
        }
    ]

这是我的代码,它允许我从除了类型数组之外的所有所需变量成功创建treecko对象。

            Gson gson = new Gson();
            PokedexMemberJava treecko = gson.fromJson(jsonPokemon, PokedexMemberJava.class);

我曾经尝试从JSON创建对象的类。当我尝试从JSON创建对象时,除了类型数组之外,所有变量都被成功加载,这些类型被创建为null。这些其他变量是从JSON的不同部分加载的,但是如果需要查看它,我在这篇文章的底部包含了一个链接。

public class PokedexMemberJava {
    int id;
    String name;
    int height;
    int weight;
    Types[] type;

public PokedexMemberJava(int id, String name, int height, int weight){
    this.id = id;
    this.name = name;
    this.height = height;
    this.weight = weight;
}


}

public class Types {
    public Type typeObject;
    public int slot;

public Types (Type typeObject, int slot){
    this.typeObject = typeObject;
    this.slot = slot;  
}

}

public class Type {
    public String url;
    public String name;

public Type (String url, String name){
    this.url = url;
    this.name = name;
}

}

我花了几个小时的时间试图解决这个问题,并尝试使用org.json之类的其他库来获取名称变量无济于事。我只包括了我试图获得的部分的JSON。如果由于某种原因你想看看我试图解析的整个JSON对象是什么样的,你可以在这里找到它:https://pokeapi.co/api/v2/pokemon/252/。此外,我为这篇文章的任何错误或不良格式道歉。这是我第一次在StackOverflow上发布问题。

1 个答案:

答案 0 :(得分:0)

您的json字段名称不匹配:

  1. Types[] types;代替Types[] type;,而{j}
  2. 中的types属性不匹配
  3. Type type;代替Type typeObject;,而{j}
  4. 中的type属性不匹配

    所以你有两个选择:

    1. 重命名java字段以匹配json属性或
    2. 使用@SerializedName覆盖属性名称:

      public class PokedexMemberJava {
          @SerializedName("types")
          Types[] type;
          ...
      
      public class Types {
          @SerializedName("type")
          public Type typeObject;