使用Scala Lift解析JSON

3

我正尝试解析一个JSON字符串,其中属性名包含特殊字符(点号)。

这是我的尝试:

//Json parser objects
case class SolrDoc(`rdf.about`:String, `dc.title`:List[String],
                   `dc.creator`:List[String], `dc.dateCopyrighted`:List[Int],
                   `dc.publisher`:List[String], `dc.type` :String)
case class SolrResponse(numFound:String, start:String, docs: List[SolrDoc])

val req = url("http://localhost:8983/solr/select") <<? Map("q" -> q)
var search_result = http(req ># { json => (json \ "response") })

var response = search_result.extract[SolrResponse]

即使我的json字符串包含所有字段的值,我仍然收到以下错误信息:
Message: net.liftweb.json.MappingException: No usable value for docs
No usable value for rdf$u002Eabout
Did not find value which can be converted into java.lang.String

我怀疑它与名称上的句点有关,但迄今为止我没有成功使其工作。

谢谢!

这是我的LiftProject.scala文件的一部分:

"net.databinder" % "dispatch-http_2.8.1" % "0.8.6",
"net.databinder" % "dispatch-http-json_2.8.1" % "0.8.6",
"net.databinder" % "dispatch-lift-json_2.8.1" % "0.8.6"

Databinder拉取了较旧版本的lift json,关于此问题在lift邮件列表中有一个讨论线程,我现在找不到它,但今天稍后会发布链接。 - fmpwizard
请尝试访问此链接:http://osdir.com/ml/liftweb/2011-10/msg00806.html - fmpwizard
1个回答

2
名称中的点号不应该成为问题。这是使用lift-json-2.4-M4时的情况。
scala> val json = """ {"first.name":"joe"} """
scala> parse(json).extract[Person]
res0: Person = Person(joe)

在哪里

case class Person(`first.name`: String)

这可能与dispatch.liftjson.Js._有关吗?我正在使用dispatch库调用solr(http(req>#{json =>(json \“response”)}}),然后按照我之前发布的方式处理结果。 - MrM
我不确定,但我认为dispatch.liftjson.Js不应该是一个问题。在一些旧版本的Lift JSON中存在与符号字段名称相关的错误。我猜你正在使用那个旧版本? - Joni
这是我正在使用的版本: "net.databinder"%"dispatch-http_2.8.1"%"0.8.6", "net.databinder"%"dispatch-http-json_2.8.1"%"0.8.6", "net.databinder"%"dispatch-lift-json_2.8.1"%"0.8.6" 我认为这是最新的。 - MrM
我刚刚编辑了我的原始问题,以包含最新的信息。 - MrM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接