我将js1作为字符串给出。
我想在“a
”下嵌套“b
”,“c
”,“abc
”。
我觉得这可以做几行代码。下面有什么更好的方法呢?
val js1 = """
{
"name" : "test",
"a" : true,
"b" : true,
"c" : true,
"d" : true,
"f" : true,
"g" : true,
"h" : true,
}
"""
val jsGroups = parse(js1)
val a = (jsGroups \ "a").values.toString.toBoolean
val b = (jsGroups \ "b").values.toString.toBoolean
val c = (jsGroups \ "c").values.toString.toBoolean
val abc = ("a" -> a) ~ ("b" -> b) ~ ("c" -> c)
val r = jsGroups.remove { x =>
x match {
case JField("a", bool) => true
case JField("b", bool) => true
case JField("c", bool) => true
case _ => false
}
}
val newJs = r.merge(JObject(List(JField("abc", abc))))
println(pretty(render(newJs)))
输出必须
{ “名”:“测试”, “d”:真实, “F”:真实, “G”:真实, “H”:真实, “ABC”:{ “一”:真实, “B”:真实, “C”:真 } }
答案 0 :(得分:1)
最简单的方法是使用case class
。
import net.liftweb.json.{ DefaultFormats, Extraction, JsonParser }
case class Abc(a: Boolean, b: Boolean, c: Boolean)
implicit val formats = DefaultFormats
// to serialize to JValue
val test = Abc(true, true, true)
Extraction.decompose(test)
// to parse from String
JsonParser.parse("""{a: true, b: true, c: true}""").extract[Abc]