用Jackson递归将bean转换为Map

时间:2018-11-15 18:48:43

标签: scala jackson

我正在尝试从bean(属性)获取json。使用杰克逊,我设法获得了地图,但是转换似乎不是递归的。

我的豆子有嵌套的豆子,所以下面的代码:

val m = new ObjectMapper()
val mapType: MapType = m.getTypeFactory.constructMapType(classOf[java.util.Map[_, _]], classOf[String], classOf[Any])
val map = mapAsScalaMapConverter(m.convertValue(bean, mapType).asInstanceOf[java.util.HashMap[String, Any]])
println(map.asScala.toMap)

打印:

Map(
    propertyOne -> true,
    propertyTwo -> false,
    propertyThree -> [],
    propertyWithBean -> {
        propertyOne=false,
        propertyTwo=0,
    },
    propertyFour -> blah
)

如您所见,这并没有将嵌套bean propertyWithBean转换为映射,因此,当使用scala.util.parsing.json.JSONObject(map.asScala.toMap)时,嵌套bean不会输出有效的JSON。

有没有办法做mapper.convertValue递归?

1 个答案:

答案 0 :(得分:1)

您可以以完全递归的方式将bean转换为Map 使用类ObjectMapper的方法convertValue(Object, Class)

val m = new ObjectMapper()
val map = m.convertValue(bean, classOf[java.util.Map[_, _]])

然后可以通过以下方式将地图打印为JSON

println(m.writeValueAsString(bean))