Lift JSON 提供了几种不同样式的反序列化 JSON。每个都有其优点和缺点。
val json = JsonParser.parse(""" { "foo": { "bar": 10 }} """)
LINQ 风格的查询理解:
scala> for { JField("bar", JInt(x)) <- json } yield x
res0: List[BigInt] = List(10)
更多示例:http://github.com/lift/lift/blob/master/framework/lift-base/lift-json/src/test/scala/net/liftweb/json/QueryExamples.scala http://github.com/lift/lift/blob/master/framework/lift-base/lift-json/src/test/scala/net/liftweb/json/QueryExamples.scala
使用案例类提取值
implicit val formats = net.liftweb.json.DefaultFormats
case class Foo(foo: Bar)
case class Bar(bar: Int)
json.extract[Foo]
更多示例:https://github.com/lift/lift/blob/master/framework/lift-base/lift-json/src/test/scala/net/liftweb/json/ExtractionExamples.scala https://github.com/lift/lift/blob/master/framework/lift-base/lift-json/src/test/scala/net/liftweb/json/ExtractionExamples.scala
XPath风格
scala> val JInt(x) = json \ "foo" \ "bar"
x: BigInt = 10
非类型安全值
scala> json.values
res0: Map((foo,Map(bar -> 10)))