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

Jackson的JsonNode迭代时如何同时获取key与value

问题原因

你调用的JsonNode.iterator()方法本身仅返回节点的属性值,该方法主要面向数组类型的JsonNode设计,用于遍历数组内的元素,因此遍历对象类型的JsonNode时无法获取对应的属性key。

正确遍历方法

1. 对象类型JsonNode(对应你转换的User类对象场景)

调用fields()方法即可获取包含键值对的迭代器,示例代码如下:

val mapper = ObjectMapper()
val node = mapper.valueToTree<JsonNode>(userData)

// 遍历所有键值对
node.fields().forEachRemaining { entry ->
    val key = entry.key
    val value = entry.value
    // 输出示例:"name": John
    println("\"$key\": ${value.asText()}")
}

如果需要用传统迭代器写法也可以用while循环实现:

val fieldIterator = node.fields()
while (fieldIterator.hasNext()) {
    val (key, value) = fieldIterator.next()
    // 业务处理逻辑
}

2. 数组类型JsonNode适配

如果你的JsonNode是数组类型,本身没有自定义属性key,仅存在下标索引,可以用以下方式遍历:

if (node.isArray) {
    node.forEachIndexed { index, valueNode ->
        println("索引$index: ${valueNode.asText()}")
    }
}

注意事项

  • 遍历前建议先通过node.isObject判断节点类型,避免类型不匹配报错
  • 如果属性值不是字符串类型,不要直接调用asText(),可根据实际类型调用asInt()、asBoolean()等方法,或直接操作JsonNode对象完成后续逻辑

内容的提问来源于stack exchange,提问作者John H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:06:03