使用Gson从Json反序列化Map

时间:2013-07-05 15:42:55

标签: java json gson

让我们说你的Json由一堆自由形式的对组成

"config": {
    "k1": "abc",
    "k2": "xyz"
},

规则

  • 我不知道我有多少把钥匙
  • 所有值均为字符串
  • 我希望地图可以通过密钥进行寻址

其中一些值是字符串,其他值是数字。我在想HashMap

public class Outer {

    private Config config = new Config();

    public Config getConfig() {
        return config;
    }

    public void setConfig(Config config) {
        this.config = config;
    }


    public class Config {
        private Map<String, String> map = new HashMap<>();

        public Map<String, String> getMap() {
            return map;
        }

        public void setMap(Map<String, String> map) {
            this.map = map;
        }
    }
}

使用测试时,我看到getConfig()返回非空值。但是当我到getMap()时,我得到null

请帮助我理解我在这里缺少的东西。

1 个答案:

答案 0 :(得分:3)

你应该只使用:

public class Outer {

    private Map<String, String> config = new HashMap<>();

    public Map<String, String> getConfig() {
        return config;
    }
    public void setConfig(Map<String, String> config) {
        this.config = config;
    }
}

在您编写的类模型中,您描述这样的JSON:

"config": {
    "map": {
        "k1": "abc",
        "k2": "xyz"
    }
},

但正如你所看到的,那不是你想要的......

您必须意识到JSON中的字段config不是包含名为map的字段的对象,该字段代表Map ...但字段{{1} } 代表自己为config