Json4s:在反序列化时将未知字段保留在地图中

时间:2018-04-18 14:59:43

标签: json scala parsing deserialization json4s

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

我想拍摄我需要的字段,然后将其余部分反序列化为地图。该类也需要正确序列化。

e.g。来自端点的JSON响应:

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

e.g。代码中使用的case类:

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

这有一个简单的解决方案吗?

我已尝试为此实现自定义Serialiser,但目前还没有太多运气。似乎这是一个很普遍的要求。有没有办法用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)))
  }))

1 个答案:

答案 0 :(得分:0)

我能够在原始问题中使用自定义序列化器解决此问题。由于一个不相关的问题,它对我没有用。