如何"展平"复合对象的JSon表示?

GCl*_*unt 5 json scala lift

假设我想在Json中序列化以下结构:

case class A(name:String)

case class B(age:Int)

case class C(id:String, a:A,b:B)
Run Code Online (Sandbox Code Playgroud)

我正在使用lift-json"write(...)",但我希望将结构展平,而不是:

{ id:xx , a:{ name:"xxxx" }, b:{ age:xxxx } }
Run Code Online (Sandbox Code Playgroud)

我想得到:

{ id:xx , name:"xxxx" , age:xxxx  }
Run Code Online (Sandbox Code Playgroud)

rom*_*usz 1

如果 A 和 B 有多个字段,您将需要稍微不同的方法:

import net.liftweb.json._
import net.liftweb.json.JsonAST._
import net.liftweb.json.JsonDSL._

implicit val formats = net.liftweb.json.DefaultFormats
implicit def cToJson(c: C): JValue = (("id" -> c.id):JValue) merge (Extraction decompose c.a) merge (Extraction decompose c.b)
val c1 = C("c1", A("a name", "a nick", "an alias"), B(11, 111, 1111))
Printer pretty (JsonAST render c1)
res0: String =
{
  "id":"c1",
  "name":"a name",
  "nick":"a nick",
  "alias":"an alias",
  "age":11,
  "weight":111,
  "height":1111
}
Run Code Online (Sandbox Code Playgroud)