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

io.vertx.core.json嵌套JsonObject使用Stream API按二级key查找值失败

问题根因

你编写的代码仅能遍历io.vertx.core.json.JsonObject的一级键值对,而field5是嵌套在field4数组的子JsonObject内部的字段,不在第一层级,因此无法匹配到结果。

实现方案

基于Vert.x Json库的API配合Stream API,实现递归遍历所有嵌套JsonObject、JsonArray结构的搜索逻辑即可,代码如下:

import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Stream;

// 递归搜索指定key的工具方法
private Optional<Object> searchByKey(Object jsonNode, String targetKey) {
    // 处理JsonObject类型节点
    if (jsonNode instanceof JsonObject jsonObj) {
        // 优先匹配当前层级的key
        Optional<Object> currentMatch = jsonObj.stream()
                .filter(entry -> Objects.equals(entry.getKey(), targetKey))
                .map(Map.Entry::getValue)
                .findAny();
        if (currentMatch.isPresent()) {
            return currentMatch;
        }
        // 递归遍历当前层级所有值的子节点
        return jsonObj.stream()
                .map(Map.Entry::getValue)
                .flatMap(child -> searchByKey(child, targetKey).stream())
                .findAny();
    }
    // 处理JsonArray类型节点
    if (jsonNode instanceof JsonArray jsonArr) {
        return jsonArr.stream()
                .flatMap(child -> searchByKey(child, targetKey).stream())
                .findAny();
    }
    // 普通值类型无子节点,匹配失败
    return Optional.empty();
}

调用示例:

// myJsonObject为你存储嵌套结构的JsonObject实例
Optional<Object> field5Result = searchByKey(myJsonObject, "field5");
// 可按需要转换为对应类型
String field5Value = field5Result.map(Object::toString).orElse(null);
Java 8适配说明

如果使用Java 8不支持instanceof模式匹配,修改类型判断部分的代码即可:

// 替换JsonObject判断逻辑
if (jsonNode instanceof JsonObject) {
    JsonObject jsonObj = (JsonObject) jsonNode;
    // 其余逻辑和上述工具方法一致
}
// 替换JsonArray判断逻辑
if (jsonNode instanceof JsonArray) {
    JsonArray jsonArr = (JsonArray) jsonNode;
    // 其余逻辑和上述工具方法一致
}
逻辑说明
  • 优先匹配当前JsonObject层级的key,匹配成功直接返回结果,减少无效遍历
  • 遇到JsonArray结构时自动遍历数组内所有元素递归搜索
  • 全程使用Optional处理空值,避免空指针异常
  • 完全基于Vert.x官方Json库实现,不需要引入第三方依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:48:03