【发布时间】:2017-01-18 01:19:06
【问题描述】:
在解析 Json 字符串时,在某些情况下,我们只想解析字段的子集(我们知道我们需要的字段)并延迟其余字段的任何语义解析/映射。
例如我们想要检查键值事件中的键以进行(例如)负载平衡,但是在那个时候我们没有足够的信息来完全解析值(我们假设一些应用程序会知道什么与值有关):
val json = """{ "key": {"a": true, "b": 123}, "value": [1,2,3,4] }"""
case class Key(a: Boolean, b: Int)
case class Event(key: Key, value: ???) // value can be any valid Json
import org.json4s._
import org.json4s.native.JsonMethods._
implicit val formats = DefaultFormats
val parsedJson = parse(json)
parsedJson.extract[Event]
问题是如何表示我们还不知道(或不关心)要解析的字段?我们添加什么作为value 的类型?
注意:一种解决方案是将事件更改为case class Event(key: Key)。这会起作用,但它会完全忽略该值,我们理想地希望保留它,以便我们可以将它正确地分派给另一个服务。 所以这个解决方案对我们不起作用。
【问题讨论】: