我正在尝试从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递归?
答案 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))