Gson从Json返回空JsonObject

时间:2015-07-22 19:34:42

标签: java json gson

所以,我有一个String,它是我在类上实现的toJson方法的结果,并且在我的测试代码中已经确认它是我班级的正确Json表示。我的目标是将此String转换为JsonObject,并使用Gson将其传递给构造函数。但是,我遇到了一个奇怪的问题。

这是我正在调用的代码:

Gson gson = new Gson();
JsonObject jObj = gson.fromJson(jsonString, JsonObject.class);

我之前在我的项目的许多地方使用了完全相同的代码片段,对于其他类,它已经运行良好。我甚至将其中一个功能代码片段复制到此测试类中并尝试了它。但是,我尝试的每个版本都会产生相同的结果 - jObj是一组空的括号。

我不明白它是如何发生的。我已经确认jsonString具有它应该需要的所有字段。为什么Gson会返回一个空的JsonObject?没有例外被抛出。

3 个答案:

答案 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());

其中KV是地图的键和值类型。如果它不是Map,则指定从中获取jsonString的任何类。

答案 2 :(得分:0)

就我而言,我在匕首模块中意外使用了以下初始化程序。

Gson gson = new GsonBuilder()
    .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
    .create()

我删除了setFieldNamingPolicy并且它有效。