【问题标题】:Gson fromJson returning empty JsonObjectGson fromJson 返回空的 JsonObject
【发布时间】:2015-07-22 19:34:41
【问题描述】:

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

这是我正在调用的代码:

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

我之前在我的项目中的许多地方都使用过完全相同的 sn-p 代码,用于其他类,并且运行良好。我什至将其中一个功能性的 sn-ps 代码复制到了这个测试类中并进行了尝试。但是,我尝试的每个版本都会产生相同的结果——jObj 是一组空括号。

我不明白这是怎么回事。我已经确认 jsonString 具有它应该需要的所有字段。为什么 Gson 返回一个空的 JsonObject?没有抛出异常。

【问题讨论】:

  • 得到空JsonObject时jsonString的内容是什么?
  • 字符串为 "{"varName":1, "otherVarName":2, "thirdVarName":3.4}" 等等。典型的 Json 对象
  • 它对我有用,我得到了预期的输出。请展示一个演示问题的小程序。
  • 如果添加if (jsonString.trim().isEmpty()) throw new IllegalArgumentException(); 会怎样?
  • 如果我添加该代码,它不会抛出 IllegalArgument 异常。该字符串在任何时候都不是空的——只是返回的 JsonObject。不为空,而是为空。

标签: java json gson


【解决方案1】:

好的,所以我知道这有点旧,但我遇到了同样的问题。分辨率正在更改 jar 文件。我在另一个项目中有一个类似的代码示例,但后来我在另一个项目中遇到了完全相同的问题。那么问题是一个较旧的gson-2.1.jar。将问题应用程序更新为匹配的 gson-2.3.1.jar 并且一切正常。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    从您说字符串是{"varName":1, "otherVarName":2, "thirdVarName":3.4} 的评论来看,看起来序列化的对象是Map。您可能需要指定类型标记:

    gson.fromJson(jsonString, new TypeToken<Map<K,V>>() {}.getType());
    

    其中KV 是映射的键和值类型。如果不是Map,指定jsonString 是从哪个类获取的。

    【讨论】:

    • @Chthonic Project - 我相信你是绝对正确的。详细说明:sites.google.com/site/gson/…
    • @MichaelHubbard :添加了解释,paulsm4 发布的链接对此进行了详细解释。
    • 但是 OP 正试图从这个 String 中获取 JsonObject,而不是 Map
    • @AlexisC。 :据我所知,OP 的字符串很可能是从Map&lt;String, Integer&gt; 获得的。
    • 是的,但据我了解,问题在于转换 String -&gt; JsonObject。这个String 也可以来自任何其他类,不一定是Map
    【解决方案3】:

    就我而言,我不小心在我的 dagger 模块中使用了以下初始化程序。

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

    我删除了setFieldNamingPolicy,它起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多