如何在HashMap中存储一个带Gson的JSON

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在HashMap中存储一个带Gson的JSON相关的知识,希望对你有一定的参考价值。

团队我需要一种正确的方法将数据存储到HashMap<>使用Gson coz我正在做跟随Java类但当我尝试从HashMap<>获得一些价值我只是得到NullPointerException错误,我成功获得Json到Java类coz当我试图从Hashmap<>中获取一些价值时,为什么我需要将它存储在HashMap<>中,因为对象名称非常随机,我不能为每个项目制作一个类。

我尝试存储JSON数据的Java类:

public class Response {

private int id;
private String name;
private UserBean user;
private List<ItemsBean> items;

public int getId() {return id;}

public void setId(int id) {this.id = id;}

public String getName() {return name;}

public void setName(String name) {this.name = name;}

public UserBean getUser() {return user;}

public void setUser(UserBean user) {this.user = user;}

public List<ItemsBean> getItems() {return items;}

public void setItems(List<ItemsBean> items) {this.items = items;}


public static class UserBean {

    private String name;

    public String getName() {return name;}

    public void setName(String name) {this.name = name;}

}


public static class ItemsBean {

    private HashMap<String, CodecBean> codec;

    public HashMap<String, CodecBean> getCodec() {return codec;}

    public void setCodec(HashMap<String, CodecBean> codec) {this.codec = codec;}

    public static class CodecBean {

        private int id;
        private int strong;
        private boolean active;
        private String sell;

        public int getId() {return id;}

        public void setId(int id) {this.id = id;}

        public int getStrong() {return strong;}

        public void setStrong(int strong) {this.strong = strong;}

        public boolean isActive() {return active;}

        public void setActive(boolean active) {this.active = active;}

        public String getSell() {return sell;}

        public void setSell(String sell) {this.sell = sell;}
    }
}}

JSON:

{
"id": 1001,
"name": "Super1",
"user": {
    "name": "The Super 1"
},
"items": [{
    "987987M7812b163eryrt": {
        "id": 1,
        "strong": 456,
        "active": true,
        "sell": "te"
    },
    "90812bn120893juuh": {
        "id": 2,
        "strong": 4700,
        "active": true,
        "sell": "tt"
    },
    "981273jn19203nj123rg": {
        "id": 3,
        "strong": 3000,
        "active": true,
        "sell": "ti"
    }
}]
}

我尝试以这种方式获取值:

Response.ItemsBean item = (Response.ItemsBean) getItem(i);
TextView txt;
txt.setText(item.getCodec().get(i).getSell());

你能告诉我我做错了吗?

提前致谢

答案

我认为您需要使用LinkedTreeMap而不是Hashmap更改关注代码

....
private LinkedTreeMap<String, CodecBean> codec;
...

以上是关于如何在HashMap中存储一个带Gson的JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Gson 将 JSON 转换为 HashMap?

Android安卓Gson解析带二级跳转

如何使用Retrofit 2和Gson来模拟JSON响应“密钥”频繁更改的数据

如果列表包含不同的类,如何使用 gson 将 json 转换为 arraylist?

java 中json对象转为string类型

Gson应用:利用map和list来拼装Json消息