如何让json4s或其他scala json libs生成Java Collections

时间:2018-03-28 14:40:20

标签: java json scala json4s

背景:

  1. 我使用了一些需要Java Collections的Java库(java.util.ArrayList等)。
  2. 输入JSON项是动态的,所以我只能使用Map[String, Any]作为json4s'提取方法的结果类型(即parse(json).extract[Map[String, Any]]
  3. 例外:

    我从Java库中得到一个例外java.lang.ClassCastException: scala.collection.immutable.$colon$colon cannot be cast to java.util.ArrayList

    原因:

    我想这是因为Json4s只为List元素生成scala List而Java JArray(例如["a", "b", "c"] => scala.collection.immutable.List("a", "b", "c")

    那么,问题是我如何处理这个案子?

2 个答案:

答案 0 :(得分:0)

你应该坚持使用json4s的scala类型(通常用于所有scala代码)。然后,您可以使用scala.collection.JavaConverters以下列方式转换scala对象。

\\

如果你真的需要一个ArrayList(而不仅仅是val list = List(1,2,3) val javaList: java.util.List[Int] = list.asJava yourJavaLib.call(javaList) ),我只会按照以下方式创建它。

java.util.List

答案 1 :(得分:0)

此刻,我发现了一个丑陋但有效的方法。

mapper = new com.fasterxml.jackson.databind.ObjectMapper mapper.readValue(org.json4s.jackson.Serialization.write(scalaMap), new TypeReference[java.util.Map[String, Object]](){})