케이스 클래스에 필드가 1개뿐인 경우 json을 케이스 클래스로 전환하는 방법
놀이에서는 2.1 읽기를 사용하여 Json을 객체에 마샬링합니다.그러나 케이스 클래스에 필드가1개밖에 없는데 어떻게 하면 좋을까요?하나의 필드 'and'는 사용되지 않으므로 더 많은 필드에 대해 작동하는 IDE가 작동하지 않습니다.따라서 Function Builder를 얻을 수 없습니다.
다음 코드는 타입 미스매치를 나타냅니다.어떻게 하면 고칠 수 있을까요?
case class Data(stamm: Seq[String])
implicit val dataReads = (
(__ \ "stamm").read(Reads.list[String])
)(Data)
Julien이 대답한 바와 같이 싱글필드 케이스클래스는 다음과 같이 읽을 수 있습니다.
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해야 합니다.
import play.api.libs.functional.syntax._
Json 콤비네이터는 단일 필드 케이스 클래스에는 사용할 수 없습니다.
Pascal(이 API의 작성자)은 이 상황을 https://groups.google.com/forum/?from groups=#!starred/play-framework/hGrveOkbJ6U에서 설명하고 있습니다.
다음과 같은 몇 가지 해결 방법이 있습니다.
case class A(value: List[Int])
val areads = (__ \ 'value).read[List[Int]].map{ l => A(l) } // covariant map
@yokomizor의 답변에 기초하여, 저는 가장 간단한 솔루션을 찾았습니다.Formatter
되려고
case class Person(name: String)
val personFormatter: Format[Person] =
(__ \ "full_name").format[String].inmap(Person.apply, unlift(Person.unapply))
인정된 솔루션보다 더 심플한편안한 솔루션:
case class A(value: String)
val reads = (__ \ "key").read[String].map(A.apply)
언급URL : https://stackoverflow.com/questions/14754092/how-to-turn-json-to-case-class-when-case-class-has-only-one-field
'programing' 카테고리의 다른 글
facebook과 같이 로드하는 동안 플레이스홀더를 작성하는 방법 (0) | 2023.03.15 |
---|---|
클릭 시 Ajax를 사용하여 Wordpress Post를 로드하는 방법 (0) | 2023.03.15 |
express.json vs bodyParser.json (0) | 2023.03.10 |
리액트 리셋 방법JS 파일 입력 (0) | 2023.03.10 |
TypeError: 정의되지 않은 클래스 확장 값이 함수 또는 null이 아닙니다. (0) | 2023.03.10 |