所以,我有一个String,它是我在类上实现的toJson方法的结果,并且在我的测试代码中已经确认它是我班级的正确Json表示。我的目标是将此String转换为JsonObject,并使用Gson将其传递给构造函数。但是,我遇到了一个奇怪的问题。
这是我正在调用的代码:
Gson gson = new Gson();
JsonObject jObj = gson.fromJson(jsonString, JsonObject.class);
我之前在我的项目的许多地方使用了完全相同的代码片段,对于其他类,它已经运行良好。我甚至将其中一个功能代码片段复制到此测试类中并尝试了它。但是,我尝试的每个版本都会产生相同的结果 - jObj是一组空的括号。
我不明白它是如何发生的。我已经确认jsonString具有它应该需要的所有字段。为什么Gson会返回一个空的JsonObject?没有例外被抛出。
答案 0 :(得分:1)
好的,所以我知道这有点旧,但我有同样的问题。决议正在改变jar文件。我有一个类似的代码示例在另一个项目中工作,但后来我在另一个项目中遇到了完全相同的问题。那么问题是一个较旧的gson-2.1.jar。将问题应用程序更新到匹配的gson-2.3.1.jar,一切正常。希望这会有所帮助。
答案 1 :(得分:0)
从您的评论中看到字符串为{"varName":1, "otherVarName":2, "thirdVarName":3.4}
,看起来序列化对象是Map
。您可能需要指定类型标记:
gson.fromJson(jsonString, new TypeToken<Map<K,V>>() {}.getType());
其中K
和V
是地图的键和值类型。如果它不是Map
,则指定从中获取jsonString的任何类。
答案 2 :(得分:0)
就我而言,我在匕首模块中意外使用了以下初始化程序。
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create()
我删除了setFieldNamingPolicy
并且它有效。