Анализ JSON с помощью Scala lift

#json #scala #lift

#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"
  

Комментарии:

1. Databinder извлекает и более старую версию lift json, в списке рассылки lift есть тема об этом, я не могу найти ее сейчас, но опубликую ссылку позже сегодня.

2. Попробуйте это osdir.com/ml/liftweb/2011-10/msg00806.html

Ответ №1:

Точки в именах не должны быть проблемой. Это с помощью 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)
  

Комментарии:

1. может ли это быть связано с dispatch.liftjson.Js ._? Я вызываю solr, используя библиотеку отправки (http (req># { json => (json «response») })), а затем обрабатываю результат, как я опубликовал ранее.

2. Я не уверен, но я думаю, что dispatch.liftjson. Js не должен быть проблемой. В некоторых старых версиях Lift JSON была ошибка, связанная с именами символьных полей. Я предполагаю, что вы используете эту более старую версию?

3. это версия, которую я использую: «net.databinder» % «отправка-http_2.8.1» % «0.8.6», » отправкаnet.databinder»%»-http-json_2.8.1″ % «0.8.6», » net.databinder» % «dispatch-lift-json_2.8.1» % «0.8.6» Я думаю, самый последний.

4. Просто отредактировал мой первоначальный вопрос, чтобы включить в него самую свежую информацию.