【问题标题】:Gson: fields that sometimes are strings and others arraysGson:有时是字符串和其他数组的字段
【发布时间】:2015-11-28 13:28:34
【问题描述】:

我正在使用 Gson 解析 json,但我正在努力处理我得到的数据。这是我无法控制的 API (openFDA) 的一部分,因此更改它可能不是一种选择。

这是我正在努力解决的 json:https://api.fda.gov/device/event.json?search=device.generic_name:generator&limit=10

有些字段不一致,例如remedial_action。有时会这样:

"remedial_action": [
        "Recall"
]

在其他类似的结果中:

"remedial_action": ""

所以它要么是一个数组,要么是一个纯字符串。有没有办法处理这个?如果在 Gson 中不可能,还有其他可以提供帮助的 json 解析库吗?

我创建了我的 pojos here 以防有人需要代码。从那里创建了一些文件,不想在这里发送垃圾邮件。如果需要,我可以添加它们。

更新:该错误已得到确认并计划修复。

【问题讨论】:

  • 你的 POJO 是什么样子的,它的成员既是字符串又是数组?
  • 它有一个,但是当它看到另一个类型的结果时它当然会窒息。
  • 类的单个 java 成员不能既是字符串又是字符串数组。您需要有某种包含对象作为成员。

标签: java json parsing alternating


【解决方案1】:

可以通过 GSON,使用 TypeAdapter

以下是我将用来执行此操作的初始步骤:

  1. 创建一个包含数组和字符串的 POJO。我们就叫它RemedialAction吧。
  2. 在原始 POJO 中,创建新类的属性。
  3. 创建一个扩展 TypeAdapter<RemedialAction> 的类。
  4. 覆盖read()write() 方法并在其中创建逻辑。

不过,这应该有点难以解析。阅读this tutorial了解更多信息。

注意:您可以自定义getRemedialAction(),只为您提供有效的返回值——数组或字符串。

【讨论】:

  • 谢谢!我仍然相信他们身边有一个错误。填写了一个关于它的问题,但您的答案很可能是正确的。只是不会漂亮。 github.com/FDA/openfda/issues/63
  • 不是很漂亮,是的...让我知道它是否有效,如果有效,请不要忘记将其标记为正确。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多