首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Lift-JSON解析动态值

用Lift-JSON解析动态值
EN

Stack Overflow用户
提问于 2010-05-22 15:08:17
回答 1查看 2.5K关注 0票数 3

让我以一个例子来解释这个问题。如果我有一个JSON,如下所示:

{“person1”:{“名称”:“名称一”,“地址”:{“街道”:“某些街道”,“城市”:“某些城市”},

“person2”:{“名称”:“名称二”,“地址”:{“街道”:“其他街道”,“城市”:“其他城市”}}

没有限制的人数,输入的JSON可以有更多的人

我可以通过以下方式提取这个JSON对象

var persons =解析(Res).extractT

以下是相关的案例类:

案例类地址(街道: String,城市: String)

案例类人员(名称: String,地址: Address,子类: ListChild)

案例类人员(person1: Person,person2: Person)

问题:上面的场景工作得非常好。然而,需要的是键在键/值对中是动态的。因此,在提供的示例JSON中,person1和person2可以是任何东西,我需要动态地读取它们。Person类的最佳结构是什么来解释这种动态性质。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-22 17:02:51

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

代码语言:javascript
复制
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)))

如果您需要保留字段名,可以这样做:

代码语言:javascript
复制
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特性时,以下直接方法应该有效:

代码语言:javascript
复制
parse(res).extract[Map[String, Person]]
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2888599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档