2016-02-26 3 views
1

У меня есть следующий код, который я использую, чтобы попытаться разобрать некоторые JSON в случае класса Scala:JSON не анализируется правильно Play Framework

val json = 
    """{"hits": [ 
     {"created_at":"2016-02-01T15:01:03.000Z","title":"title","num_comments":778,"parent_id":null,"_tags":["story","author","story_11012044"],"objectID":"11012044","_highlightResult":{"title":{"value":"title","matchLevel":"full","matchedWords":["title"]},"author":{"value":"author","matchLevel":"none","matchedWords":[]},"story_text":{"value":"Please lead","matchLevel":"none","matchedWords":[]}}} 
    ]}""".stripMargin 

    val jsobj = Json.parse(json) 
    val r = (JsPath \ "hits").read[Seq[HiringPost]](Reads.seq[HiringPost]) 
    val res: JsResult[Seq[HiringPost]] = r.reads(jsobj) 
    println("result is: " + res) 

И некоторые implicits сделать преобразование здесь:

case class HiringPost(date: String, count: Int, id: String) 
object HiringPost { 

    implicit val hiringPostFormat = Json.format[HiringPost] 

    implicit val hiringWrites: Writes[HiringPost] = (
    (JsPath \ "date").write[String] and 
    (JsPath \ "count").write[Int] and 
    (JsPath \ "id").write[String] 
)(unlift(HiringPost.unapply)) 

    implicit val hiringReads: Reads[HiringPost] = (
    (JsPath \ "created_at").read[String] and 
    (JsPath \ "num_comments").read[Int] and 
    (JsPath \ "objectID").read[String] 
)(HiringPost.apply _) 
} 

но ответ я получаю при попытке разобрать JSON является:

result is: JsError(List((/hits(0)/date,List(ValidationError(List(error.path.missing),WrappedArray()))), (/hits(0)/count,List(ValidationError(List(error.path.missing),WrappedArray()))), (/hits(0)/id,List(ValidationError(List(error.path.missing),WrappedArray()))))) 

что неправильно остроумие h, как я написал разбор или имплициты?

ответ

1

Если вы используете Reads и Writes вам не нужно Formats.

Удалите implicit val hiringPostFormat = Json.format[HiringPost] и добавьте import HiringPost._ в свой парсинг-класс, чтобы поместить импликации в область действия - он будет работать.

1

Вы не должны определять Format[HiringPost], если у вас есть Чтения и записи. Я удивлен, что это не ошибка неявного разрешения. Избавиться от этой линии:

implicit val hiringPostFormat = Json.format[HiringPost] 

Вы также можете заменить тривиальное Пишет implicitation с макро Json.writes[HiringPost]

+0

Знаете ли вы, где я могу найти дополнительную информацию о форматах против чтения/записи? Это было действительно непонятно мне в документации Play. – jcm

Смежные вопросы