2017-02-17 8 views
0

와 JSON을 구문 분석 할 수 없습니다 나는 직렬화하고 "animalname" 필드 대신 "name"을 가지고 JSON에서 필드 "name"와 케이스 클래스 객체를 역 직렬화 할 필요가있다. 직렬화는 괜찮지 만 비 직렬화는 작동합니다. 나는 renameTo()renameFrom()와 FieldSerializer을 사용 :json4s : 이름이 바뀐 필드

사실
import org.json4s._ 
import org.json4s.FieldSerializer._ 
import org.json4s.jackson.Serialization._ 

case class WildDog(name: String) 
val dogSerializer = FieldSerializer[WildDog](
    renameTo("name", "animalname"), 
    renameFrom("animalname", "name")) 
implicit val formats = DefaultFormats + dogSerializer 
// serialize 
val json = write(WildDog("beefy")) // {"animalname":"beefy"}, as expected 
// try to deserialize 
val dog = parse(json).extract[WildDog] // expected: Dog("beefy") 

, 추출물()가 발생 예외 :

org.json4s.package$MappingException: No usable value for name 
Did not find value which can be converted into java.lang.String 
    at org.json4s.reflect.package$.fail(ws.sc:94) 
    at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$buildCtorArg(ws.sc:409) 
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$11.apply(ws.sc:417) 
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$11.apply(ws.sc:417) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(ws.sc:240) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(ws.sc:240) 
    at scala.collection.mutable.ResizableArray$class.foreach(ws.sc:55) 
    at scala.collection.mutable.ArrayBuffer.foreach(ws.sc:43) 
    at scala.collection.TraversableLike$class.map(ws.sc:240) 
    at scala.collection.AbstractTraversable.map(ws.sc:101) 
    at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$instantiate(ws.sc:417) 
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$result$6.apply(ws.sc:445) 
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$result$6.apply(ws.sc:442) 
    at org.json4s.Extraction$.org$json4s$Extraction$$customOrElse(ws.sc:454) 
    at org.json4s.Extraction$ClassInstanceBuilder.result(ws.sc:442) 
    at org.json4s.Extraction$.extract(ws.sc:304) 
    at org.json4s.Extraction$.extract(ws.sc:38) 
    at org.json4s.ExtractableJsonAstNode.extract(ws.sc:17) 

어떻게 올바르게 JSON을 역 직렬화하는?

업데이트 : 저는 Scala 2.10, json4s 3.2.5를 사용합니다.

업데이트 2 : 나는 json4s이 메이븐 의존성을 사용

<dependency> 
    <groupId>org.json4s</groupId> 
    <artifactId>json4s-jackson_2.10</artifactId> 
    <version>3.2.5</version> 
</dependency> 

답변

1

대신 val dog = parse(json).extract[WildDog]

GitHub의 페이지 val dog = read[WildDog](json) 시도 - https://github.com/json4s/json4s 너무 다른 좋은 예있다.

편집 :

작동 버전 :
스칼라 2.10 & & org.json4s.jackson> = 3.5.0
스칼라 2.11 & & org.json4s.jackson> = 3.2.5

이전 버전의 스칼라 2.10을 확인하지 않았지만 3.2.5를 사용할 때 예외가 있습니다.

또한, 내가 일을 val dog = parse(json).extract[WildDog]를 얻을 수 있어요,하지만 당신은 수입해야 JsonMethods ->import org.json4s.jackson.JsonMethods.parse

+0

시도, 같은 MappingException :( –

+1

버전이 사용하고있는 스칼라 나는 그것이 작동하도록 얻을 수 있어요? 2.11 대신 2.11을 사용합니다. – pjames

+0

스칼라 2.10, json4s 3.2.5를 사용합니다. 2.11로 전환 할 수있는 기회가 없습니다. –