【问题标题】:How to create a list from JSON objects using the GSON library?如何使用 GSON 库从 JSON 对象创建列表?
【发布时间】:2023-03-06 19:33:01
【问题描述】:

我有这个 json:

{
  "Pikachu": {
    "id": "266",
    "name": "Pikachu"
  },
  "Pichu": {
    "id": "103",
    "name": "Pichu"
  },
  "Raichu": {
    "id": "84",
    "name": "Raichu"
  }
}

这个模型:

class Pokemon: Serializable {

    @SerializedName("id")
    var id: String = ""

    @SerializedName("name")
    var name: String = ""
}

我怎样才能得到?

//retrofit call
@GET("/pokemon")
fun getPokemon(): Call<List<Pokemon>>

如果我们假设/pokemon是显示上述json的正确路径

// what i need : [Pokemon@1, Pokemon@2, Pokemon@3] 

【问题讨论】:

  • &lt;List&lt;Pokemon&gt; 会期望您在拥有 JSONObject 时反序列化 JSONArray。一般来说,您的 JSON 结构很糟糕。应该改为 [ { "id": "266", "name": "Pikachu" }, { "id": "103", "name": "Pichu" }]。
  • 嗨!我同意你的看法,但不幸的是我无法更改 Json:/

标签: android json kotlin gson retrofit


【解决方案1】:

您可以使用Map 代替List。列表用于 json 数组。您可以改为返回Call&lt;Map&lt;String, Pokemon&gt;&gt;。

【讨论】:

  • 感谢您的回答。好的,我认为我没有太多选择...我只会做map.value...密钥对我来说没用(这个json真的很糟糕)
【解决方案2】:

试试这个,下面的代码将使用 GSON 库将您的 JSON 对象 转换为 List

String jsonStr = "{\"Pikachu\": {\"id\": \"266\",\"name\": \"Pikachu\"},\"Pichu\": {\"id\": \"103\",\"name\": \"Pichu\"},\"Raichu\": {\"id\": \"84\",\"name\": \"Raichu\"}}";

private List<Pokemon> getPokemonObjects() {
    try {
        List<Pokemon> pokemonList = new ArrayList<>();
        JSONObject jsonObject = new JSONObject(jsonStr);
        Iterator<String> iterator = jsonObject.keys();
        while (iterator.hasNext()){
            String key = iterator.next();
            Gson gson = new Gson();
            Pokemon pokemon = gson.fromJson(jsonObject.get(key).toString(),Pokemon.class);
            pokemonList.add(pokemon);
        }

       return pokemonList;

    } catch (JSONException e) {
        e.printStackTrace();
    }
    return null;
}

【讨论】:

  • 感谢那些帮助我的人,但我更喜欢你的解决方案,因为它准确地回答了我的问题。
  • pokemonList.map { it.name } = {ArrayList@8818} size = 3 0 = "Pikachu"" 1 = "Pichu 2 = "Raichu" //它有效
猜你喜欢
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 2021-12-05
  • 1970-01-01
相关资源
最近更新 更多