使用jackson

时间:2016-03-09 23:14:03

标签: json scala serialization jackson

我正在尝试使用Jackson序列化然后反序列化Scala不可变ListMap。

我定义val foo: ListMap[String, String] = ListMap("foo1" -> "bar1", "foo2" -> "bar2")然后使用jackson序列化它。我验证了序列化的字符串,看起来很好。然后当我尝试使用Jackson反序列化字符串时,我收到以下错误:

java.lang.ClassCastException: scala.collection.immutable.Map$Map1 cannot be cast to scala.collection.immutable.ListMap
    at .<init>(<console>:12)
    at .<clinit>(<console>)
    at .<init>(<console>:7)
    at .<clinit>(<console>)
    at $print(<console>)

知道如何有效地序列化/反序列化ListMaps吗?

1 个答案:

答案 0 :(得分:2)

代码

序列化ListMap的代码是

val mapper = new ObjectMapper
mapper.registerModule(DefaultScalaModule)
val m = ListMap((5, 1), (2, 33), (7, 22), (8, 333))
mapper.writeValueAsString(m)

反序列化是

val str = """{"5":1,"2":33,"7":22,"8":333}"""
val listMap:ListMap = objectMapper.readValue[ListMap](str)

使用与序列化示例中相同的初始化映射器。

输出

用于序列化

{"5":1,"2":33,"7":22,"8":333}

用于反序列化

Map(5 -> 1, 2 -> 33, 7 -> 22, 8 -> 333)