HashMap转换为Gson,其中包含Maps作为值

4

我想使用这种方法将HashMap转换成JSON格式:

public String JSObject(Object object) {
        Gson gson = new Gson();
        return gson.toJson(object);
}

但问题在于,当我的 HashMap 中有另一个 HashMap 作为结果的键时,在 JSON 中我得不到任何东西。假设我在 Java 中有这样一个东西:

put("key", HashMap);

转换后,我的JSON文件看起来像这样:
"key" : {}

我希望你能够提供以下内容:
"key" : {
    "key1" : "value1",
    "key2" : "value2"
}

这是因为toJson()不支持更复杂的JSON吗?我认为更有可能是我做错了什么。

@编辑

以下是我初始化地图的方式:

put("key", new HashMap<String,String>(){{
                put("key1", "value1");
            }};

不可能...我们能看到那段代码吗? - ΦXocę 웃 Пepeúpa ツ
1
可能是如何使用GSON序列化Map of a Map?的重复问题。 - kennytm
1
对我来说它运行良好,你确定你的地图不是空的吗? - ByeBye
嘿,谢谢回复,我编辑了问题以展示如何初始化地图。 - shurrok
1个回答

1

使用此代码:

final HashMap<String, String> value = new HashMap<String, String>(){{
    put("key1", "value1");
}};

你正在创建一个带有实例初始化器的新的匿名内部类。
来自Gson文档:
Gson也可以反序列化静态嵌套类。但是,Gson不能自动反序列化纯内部类,因为它们的无参构造函数还需要对包含对象的引用,而这在反序列化时不可用。
只需更改你的映射,不使用实例初始化器即可:
final Map<String, String> value = new HashMap<>();
value.put("key", "value");

换句话说,我需要改进我的方法。我说得对吗? - shurrok
不要使用“实例初始化程序”,因为它会创建无名内部类,而gson无法序列化。 - ByeBye
是的,那是最简单的解决方案。但我很好奇是否可以更改我的“JSObject”方法,以便让我使用匿名类。 - shurrok
这似乎不是问题所在。你谈论的是序列化,而问题是关于序列化的。 - user3151902

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接