You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jackson ObjectMapper readTree如何将JSON布尔值转为字符串?

问题:Jackson ObjectMapper反序列化时将布尔值转为字符串

原始JSON数据:

{
   "data":{
      "id":"550e8400-e29b-41d4-a716-446655440000",
      "timestamp":"2023-05-01T16:34:16.993007076Z",
      "isProcessed":true,
      "isFailed":false
   }
}

期望处理后的格式:

{
   "data":{
      "id":"550e8400-e29b-41d4-a716-446655440000",
      "timestamp":"2023-05-01T16:34:16.993007076Z",
      "isProcessed":"true",
      "isFailed":"false"
   }
}

当前代码:

val data: JsonNode = objectMapper.readTree(logEvent)
saveData(data) // Store as jsonb

请问是否需要为ObjectMapper添加自定义反序列化器?


解答

不需要额外添加自定义反序列化器,有两种简便方案可选:

方案一:全局配置布尔值序列化规则

通过注册自定义SimpleModule,让Jackson在序列化时自动将布尔值转为字符串,无需修改反序列化逻辑:

val module = SimpleModule()
// 处理基本类型Boolean
module.addSerializer(Boolean::class.java, object : JsonSerializer<Boolean>() {
    override fun serialize(value: Boolean?, gen: JsonGenerator, serializers: SerializerProvider) {
        gen.writeString(value.toString())
    }
})
// 处理包装类型Boolean
module.addSerializer(java.lang.Boolean::class.java, object : JsonSerializer<java.lang.Boolean>() {
    override fun serialize(value: java.lang.Boolean?, gen: JsonGenerator, serializers: SerializerProvider) {
        gen.writeString(value.toString())
    }
})
objectMapper.registerModule(module)

// 后续正常处理数据
val data: JsonNode = objectMapper.readTree(logEvent)
saveData(data)

注:该配置会影响全局所有布尔值的序列化行为,适合需要统一转换的场景。

方案二:手动遍历修改指定字段

如果只需要转换特定字段,可直接遍历JsonNode修改字段类型:

val rootNode = objectMapper.readTree(logEvent)
val dataNode = rootNode.get("data")

// 转换isProcessed字段
if (dataNode.has("isProcessed") && dataNode.get("isProcessed").isBoolean) {
    dataNode.put("isProcessed", dataNode.get("isProcessed").asText())
}

// 转换isFailed字段
if (dataNode.has("isFailed") && dataNode.get("isFailed").isBoolean) {
    dataNode.put("isFailed", dataNode.get("isFailed").asText())
}

saveData(rootNode)

这种方式更灵活,仅针对目标字段修改,不会影响其他布尔值的处理。


内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:18:09