복붙노트

[SCALA] 케이스 클래스는 하나 개의 필드가있는 경우 경우 클래스에 JSON을 설정하는 방법

SCALA

케이스 클래스는 하나 개의 필드가있는 경우 경우 클래스에 JSON을 설정하는 방법

놀이에서 2.1 객체에 마샬 JSON으로 사용된다 읽습니다. 그러나 경우 클래스는 하나의 필드가 때이 작업을 수행하는 방법에 대해 설명합니다. 더 필드에 작동하는 ideom은 하나 개의 필드 '와'이 사용되지 않는 것과 같이,하지 작업을 수행합니다. 따라서 나는 FunctionBuilder을하지 않습니다.

다음 코드는 나에게 형식이 일치를 제공합니다. 나는이 문제를 어떻게 해결할 수 있습니까?

case class Data(stamm: Seq[String])


implicit val dataReads  = (
  (__ \ "stamm").read(Reads.list[String])
)(Data)

해결법

  1. ==============================

    1.JSON 콤비는 하나의 필드의 경우 클래스 작동하지 않습니다.

    JSON 콤비는 하나의 필드의 경우 클래스 작동하지 않습니다.

    파스칼 (이 API의 작가) 여기에 이러한 상황을 설명했다 https://groups.google.com/forum/?fromgroups=#!starred/play-framework/hGrveOkbJ6U

    이와 같은 작품 몇 가지 해결 방법이 있습니다 :

    case class A(value: List[Int])
    val areads = (__ \ 'value).read[List[Int]].map{ l => A(l) } // covariant map
    
  2. ==============================

    2.줄리앙 대답, 당신이 사용하는 하나의 필드 케이스 클래스를 읽을 수 있습니다 :

    줄리앙 대답, 당신이 사용하는 하나의 필드 케이스 클래스를 읽을 수 있습니다 :

    case class Person(name: String)
    
    val personReads: Reads[Person] = 
      (__ \ "name").read[String].map { name => Person(name) }
    

    그냥 보완, 당신이 쓰고 싶은 경우 :

    val personWrites: Writes[Person] = 
      (__ \ "name").write[String].contramap { (person: Person) => person.name }
    

    또는 형식 (읽기 및 쓰기)

    val personFormat: Format[Person] = 
      (__ \ "name").format[String].inmap(name => Person(name), (person: Person) => person.name)
    

    쓰기와 형식이를 가져올 수있다 :

    import play.api.libs.functional.syntax._
    
  3. ==============================

    3.@의 yokomizor의 답변에 따라, 나는이 될 수있는 포맷터를 만들 수있는 간단한 방법을 발견

    @의 yokomizor의 답변에 따라, 나는이 될 수있는 포맷터를 만들 수있는 간단한 방법을 발견

    case class Person(name: String)
    val personFormatter: Format[Person] =
      (__ \ "full_name").format[String].inmap(Person.apply, unlift(Person.unapply))
    
  4. ==============================

    4.허용 된 것보다 더 간단한 솔루션 :

    허용 된 것보다 더 간단한 솔루션 :

    case class A(value: String)
    val reads = (__ \ "key").read[String].map(A.apply)
    
  5. from https://stackoverflow.com/questions/14754092/how-to-turn-json-to-case-class-when-case-class-has-only-one-field by cc-by-sa and MIT license