json - 使用 Lift-JSON 解析动态值

标签 json scala lift

让我用一个例子来解释这个问题。如果我有如下 JSON:

{"person1":{"name": "Name One", "address": {"street": "Some Street","city": "Some City"}},
"person2":{"name": "Name Two", "address": {"street": "Some Other Street","city": "Some Other City"}}}

[人数不限,输入JSON可以多人]

我可以通过这样做将这个 JSON 提取到 Persons 对象

var persons = parse(res).extract[T]

以下是相关案例类:

case class Address(street: String, city: String)
case class Person(name: String, address: Address, children: List[Child])
case class Persons(person1: Person, person2: Person)

问题: 上述场景运行良好。然而,需要的是键在键/值对中是动态的。所以在提供的 JSON 示例中,person1person2 可以是任何东西,我需要动态读取它们。对于 Persons 类来说,考虑这种动态性质的最佳结构是什么。

最佳答案

一种解析方法是映射根 JSON 对象的子元素:

scala> parse(res).children.map(_.extract[Person])
res3: List[Person] = List(Person(Name One,Address(Some Street,Some City)), Person(Name Two,Address(Some Other Street,Some Other City)))

如果您需要保留字段名称,或者像这样:

scala> Map() ++ parse(res).children.map { case f: JField => (f.name, f.extract[Person]) }
res4: scala.collection.immutable.Map[String,Person] = Map(person1 -> Person(Name One,Address(Some Street,Some City)), person2 -> Person(Name Two,Address(Some Other Street,Some Other City)))

注意,当我们开始使用 2.8 功能时,以下直接方式应该可以工作:

parse(res).extract[Map[String, Person]]

关于json - 使用 Lift-JSON 解析动态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2888599/

相关文章:

json - 无法在 linux 中使用 jq 解析 artifactory 的 json 输出

javascript - 如何通过json对象数组给嵌套对象赋值

json - 如何将 F# Union 类型与 Servicestack JSON 序列化结合使用?

scala - Lift 的状态习语是什么?

java - 如何在反序列化对象中保留字段的默认值?

scala - Scala super 构造函数中的空值?

scala - 为 Scala 特征中的方法指定具体类型

scala - 如何使用 Scala 解析器组合器处理不区分大小写的关键字

scala - Scala中隐式参数的通用容器的隐式转换

scala - Liftweb - 访问获取/发布参数