用Jackson递归将bean转换为Map

信念E.

我正在尝试从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)不会输出有效的JSON。

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

托马斯·弗里奇

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

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

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

println(m.writeValueAsString(bean))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章