首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以使用Scala lift-json库将JSON解析为Map吗?

我可以使用Scala lift-json库将JSON解析为Map吗?
EN

Stack Overflow用户
提问于 2010-10-02 04:56:48
回答 2查看 7.3K关注 0票数 12

有没有一种方法可以使用lift-json库的JObject类来充当地图?

例如:

代码语言:javascript
复制
val json = """
{ "_id" : { "$oid" : "4ca63596ae65a71dd376938e"} , "foo" : "bar" , "size" : 5}
"""

val record = JsonParser.parse(json)
record: net.liftweb.json.JsonAST.JValue = JObject(List(JField(_id,JObject(List(JField($oid,JString(4ca63596ae65a71dd376938e))))), JField(foo,JString(bar)), JField(size,JInt(5))))

</code>

我期望记录(“foo”)返回"bar“

我注意到一个值函数,它打印出一个地图,但实际的对象是一个JValue.this.Values?

scala> record.values res43: record.Values = Map((_id,Map($oid -> 4ca63596ae65a71dd376938e)), (foo,bar), (size,5))

scala> record.values("foo") :12: error: record.values of type record.Values does not take parameters record.values("foo")

有一些lift-json库提取case类的示例,但在本例中,我事先并不知道json模式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-02 05:10:41

如果您查看实现,您将看到

代码语言:javascript
复制
case class JObject(obj: List[JField]) extends JValue {
  type Values = Map[String, Any]
  def values = Map() ++ obj.map(_.values.asInstanceOf[(String, Any)]) // FIXME compiler fails if cast is removed
}

因此,这应该是可行的:

代码语言:javascript
复制
record.values.asInstanceOf[Map[String, Any]]("foo")

您也可以尝试

代码语言:javascript
复制
record.values.apply("foo")
票数 13
EN

Stack Overflow用户

发布于 2010-10-02 05:21:18

JValue.Values是路径相关的类型。这意味着如果你持有一个JString,它将是一个字符串,或者如果你拥有一个JArray,它将是一个ListAny。如果您确定解析的JSON是一个JSON对象,则可以将其转换为适当的类型。

代码语言:javascript
复制
val record = JsonParser.parse(json).asInstanceOf[JObject]

JObject的路径相关类型是MapString、Any,因此:

代码语言:javascript
复制
scala> record.values("foo")                                     
res0: Any = bar

出于好奇心,如果您不知道要解析的数据的形状,是不是有点问题?

注意,如果您的数据包含(名称、描述、年龄),并且年龄是可选的,则可以将该JSON读入:

代码语言:javascript
复制
case class Person(name: String, description: String, age: Option[Int])
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3843000

复制
相关文章

相似问题

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