2016-08-22 3 views
0

나의 현재 해시 맵은 다음과 같습니다 해시 맵으로 중첩 된 중첩 HashMap을 스칼라에서 json으로 변환하려면 어떻게해야합니까?

val h1 = HashMap[String,Object]() 
val h2 = ListBuffer[HashMap[String,String]]() 
val h3 = HashMap[String,Object]() 
val h4 = ListBuffer[HashMap[String,String]]() 

는 기본적으로 H1

는 H2하는 키와 H3 및 다른 문자열 내 주요 해시입니다. h3에는 h4 및 다른 문자열에 대한 키가 있습니다.

스칼라는 현악기와> 개체 유형의 JSON에 해시를 지원하지 않기 때문에, 나는 내 옛 기록을 작성했다 보았다 읽기/방법

나는 쓰기를 작성하고 읽을 수있는 방법을 방법 등이 그 내부지도를 찾았습니까?

지금까지이 다음 봤는데 : 잭슨을 사용하여 오류가에 디마의 제안에서 Scala to JSON in Play Framework 2.1

플레이와

play.api.UnexpectedException: Unexpected exception[RuntimeException: java.lang.VerifyError: class com.fasterxml.jackson.module.scala.ser.ScalaIteratorSerializer overrides final method withResolved.(Lcom/fasterxml/jackson/databind/BeanProperty;Lcom/fasterxml/jackson/databind/jsontype/TypeSerializer;Lcom/fasterxml/jackson/databind/JsonSerializer;)Lcom/fasterxml/jackson/databind/ser/std/AsArraySerializerBase;] 
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:276) 
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:206) 
at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160) 
at play.api.DefaultGlobal$.onError(GlobalSettings.scala:188) 
at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:98) 
at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100) 
at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99) 
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344) 
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343) 
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) 

Caused by: java.lang.RuntimeException: java.lang.VerifyError: class com.fasterxml.jackson.module.scala.ser.ScalaIteratorSerializer overrides final method withResolved.(Lcom/fasterxml/jackson/databind/BeanProperty;Lcom/fasterxml/jackson/databind/jsontype/TypeSerializer;Lcom/fasterxml/jackson/databind/JsonSerializer;)Lcom/fasterxml/jackson/databind/ser/std/AsArraySerializerBase; 
at play.api.mvc.ActionBuilder$$anon$2.apply(Action.scala:463) 
at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112) 
at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112) 
at play.utils.Threads$.withContextClassLoader(Threads.scala:21) 
at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:111) 
at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:110) 
at scala.Option.map(Option.scala:146) 
at play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:110) 
at play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:103) 
at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251) 

Caused by: java.lang.VerifyError: class com.fasterxml.jackson.module.scala.ser.ScalaIteratorSerializer overrides final method withResolved.(Lcom/fasterxml/jackson/databind/BeanProperty;Lcom/fasterxml/jackson/databind/jsontype/TypeSerializer;Lcom/fasterxml/jackson/databind/JsonSerializer;)Lcom/fasterxml/jackson/databind/ser/std/AsArraySerializerBase; 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 

내 의존성을에 묶는 경우 :

libraryDependencies += "com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4" 
libraryDependencies += "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.5.1" 

답변

1

을 누가 scala가 그것을 지원하지 않는다고 당신에게 이야기 했습니까? 당신이 잭슨을 사용하는 경우, 예를 들어, 당신은 같은 것을 할 필요가 단지 것 ... 라이브러리의 다양한 종류가 있습니다 : 나는 그것이 그 자체로 고립이있을 때

val mapper = new ObjectMapper() 
    .registerModule(DefaultScalaModule) 

val h1 = mapper.readObject(input, classOf[Map[String,_]]) 
+0

감사 잭슨의 제안에 대해, 그것은 작동 ,하지만 내가 다시 재생 프로젝트에 연결하면 오류가 발생합니다. 이유는 무엇입니까? – chonglawr

+0

같은 앱에서 다른 버전의 Jackson을 사용하고 있기 때문에 짐작할 수 있습니다. 왜 잭슨 코어와 스칼라 모듈은 다른 버전을 가지고있는 것입니까? – Dima

+0

그래, 그게 문제 였어, 나는 그들 모두를 업데이 트하고 동일한 버전을 가지고 고정. – chonglawr

관련 문제