繁体   English   中英

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

[英]Json4s: keep unknown fields in a map when deserialising

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

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

例如端点的JSON响应:

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

例如,代码中使用的案例类:

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)))
  }))

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM