【问题标题】:Converting a bean to Map with Jackson recursively使用 Jackson 递归地将 bean 转换为 Map
【发布时间】:2018-11-15 18:48:43
【问题描述】:

我正在尝试从 bean(它的属性)中获取 json。使用 Jackson,我设法获得了 Map,但转换似乎不是递归的。

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

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 递归?

【问题讨论】:

    标签: scala jackson


    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      相关资源
      最近更新 更多