2011-11-09 94 views
2

我想解析帶有特殊字符的JSON字符串的屬性名稱(點)。用Scala升降解析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" 
+0

DataBinder的拉動和舊版本的電梯JSON的,有關於它的升降郵件列表上線,我現在不能找到它但會在今天晚些時候發佈鏈接。 – fmpwizard

+0

試試這個http://osdir.com/ml/liftweb/2011-10/msg00806.html – fmpwizard

回答

1

點的名字不應該是一個問題。這是提升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) 
+0

它可能與dispatch.liftjson.Js._有關嗎?我使用調度庫(http(req>#{json =>(json \「response」)}))調用solr,然後處理之前發佈的結果。 – MrM

+0

我不確定,但我認爲dispatch.liftjson.Js應該不成問題。在某些較早版本的Lift JSON中,有一個與符號字段名稱相關的錯誤。我的猜測是你使用的是舊版本? – Joni

+0

這是我使用的版本:「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