2011-11-09 3 views
2

J'essaye d'analyser une chaîne json avec des caractères spéciaux dans ses noms d'attributs (points).Analyse JSON avec Scala lift

C'est ce que je suis en train:

//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] 

Même si ma chaîne JSON contient des valeurs pour tous les champs c'est l'erreur que je reçois:

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 

Je soupçonne que ce a quelque chose à voir avec le point sur les noms mais jusqu'ici je n'ai pas réussi à le faire fonctionner.

Merci!

C'est un extrait de mon fichier 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 tire et version plus ancienne de ascenseur JSON, il y a un fil à ce sujet sur la liste de diffusion de ascenseur, je ne trouve pas maintenant mais affichera le lien plus tard aujourd'hui. – fmpwizard

+0

Essayez ceci http://osdir.com/ml/liftweb/2011-10/msg00806.html – fmpwizard

Répondre

1

points dans les noms ne devraient pas être un problème. C'est avec ascenseur 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

pourrait-elle être liée à dispatch.liftjson.Js._? J'appelle solr en utilisant la librairie dispatch (http (req> # {json => (json \ "response")})) puis en traitant le résultat comme je l'ai posté plus tôt. – MrM

+0

Je ne suis pas sûr mais je pense que dispatch.liftjson.Js ne devrait pas poser de problème. Il y avait un bug lié aux noms de champs symboliques dans une ancienne version de Lift JSON. Ma conjecture est que vous utilisez cette version plus ancienne? – Joni

+0

c'est la version que j'utilise: "net.databinder"% "dispatch-http_2.8.1"% "0.8.6", "net.databinder"% "envoi-http-json_2.8.1"% "0.8. 6 ", " net.databinder "%" dispatch-ascenseur-json_2.8.1 "%" 0.8.6 " Le dernier, je pense. – MrM

Questions connexes