【问题标题】:Json4s: keep unknown fields in a map when deserialisingJson4s:反序列化时将未知字段保留在地图中
【发布时间】:2018-09-28 21:23:04
【问题描述】:

我正在尝试使用 scala 中的 json4s 解析 HTTP 端点给出的响应。返回的 Json 可能有许多字段(它们都已记录和定义,但它们有很多,并且它们可能会发生变化。)我不需要引用其中的许多字段,只需将它们传递给需要处理的其他一些服务。

我想获取我需要的字段,并将其余的反序列化为地图。该类也需要正确序列化。

例如来自端点的 JSON 响应:

{
 "name": "value",
 "unknown_field": "unknown",
 "unknown_array": ["one", "two", "three"],
  ...
  ... 
}

例如代码中用到的case类:

case class TestResponse(name: String, otherFields: Map[String, Any])

有没有简单的解决方案?

我已经尝试为此实现一个自定义序列化器,但还没有多少运气。似乎这将是一个足够普遍的要求。有没有办法用 json4s 做这个 OOTB?

干杯


客户序列化程序的当前尝试:

  private object TestResponseDeserializer extends CustomSerializer[TestResponse](_ => ( {
    case JObject(JField("name_one", JString(name)) :: rest) => TestType1Response(name, rest.toMap)
    case JObject(JField("name_two", JString(name)) :: rest) => TestType2Response(name, rest.toMap)
  }, {
    case testType1: TestType1Response=>
      JObject(JField("name_one", JString(testType1.name)))
    case testType2: TestType2Response=> JObject(JField("name_two", JString(testType2.name)))
  }))

【问题讨论】:

    标签: json scala parsing deserialization json4s


    【解决方案1】:

    我能够使用原始问题中的自定义序列化程序解决此问题。由于不相关的问题,它对我不起作用。

    【讨论】:

      猜你喜欢
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      相关资源
      最近更新 更多