如何将嵌套的hasashps嵌套HashMap转换为Scala中的json?

问题描述:

我目前的HashMap是这样的:如何将嵌套的hasashps嵌套HashMap转换为Scala中的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和其他字符串。

因为Scala不支持哈希与字符串>对象类型的JSON,我已经看到了我写我的旧的读/写方法

我怎么能写的写入和读取方法,使得检测内部地图,列表?在播放搭售时

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) 

我的依赖Scala to JSON in Play Framework 2.1

从迪马的使用杰克逊,得到错误的建议:

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

我一直在关注这个至今谁告诉你scala不支持它? 有各种不同的库...例如,如果你使用杰克逊,你需要做的仅仅是这样的:在杰克逊建议

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

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

谢谢,它工作时,我有它本身隔离,但是当我将其重新插入到我的播放项目中时,我遇到了错误,你知道为什么吗? – chonglawr

+0

@我在猜测,那是因为你在同一个应用程序中使用了不同版本的Jackson。比如,为什么Jackson核心和Scala模块有不同的版本? – Dima

+0

是的,这是问题,我更新他们都有相同的版本和修复。 – chonglawr