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

Java 如何提取JSON对象中值为true的键并生成字符串数组

Java 嵌套JSON提取所有值为true的键实现方案

依赖引入

使用Java生态常用的Jackson JSON处理库实现,Maven项目添加以下依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

完整实现代码

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class TrueKeyExtractor {

    public static void main(String[] args) throws JsonProcessingException {
        // 替换为实际JSON字符串
        String jsonStr = "{\n" +
                "  \"result\": {\n" +
                "    \"code\": 200,\n" +
                "    \"status\": \"Success\",\n" +
                "    \"messages\": [\n" +
                "      \"Operation completed successfully.\"\n" +
                "    ]\n" +
                "  },\n" +
                "  \"recommendedAction\": \"NA\",\n" +
                "  \"vendorEvaluationReport\": {\n" +
                "    \"bioCatchEvaluation\": {\n" +
                "      \"sessionId\": \"79634aa0-1639-11ec-84b0-db18703348d3\",\n" +
                "      \"score\": 624,\n" +
                "      \"fraudEvaluationResult\": \"tested\",\n" +
                "      \"muid\": \"1624647875970-F12CF03A-9ADC-4C6E-8F3F-6826220B2607\",\n" +
                "      \"threatIndicators\": {\n" +
                "        \"isBot\": false,\n" +
                "        \"isEmulator\": false,\n" +
                "        \"isRat\": false\n" +
                "      },\n" +
                "      \"riskFactors\": {\n" +
                "        \"expertUser\": {\n" +
                "          \"advancedKeyCombo\": true\n" +
                "        },\n" +
                "        \"lowDataFamiliarity\": {\n" +
                "          \"importData\": true\n" +
                "        },\n" +
                "        \"riskyEvent\": {\n" +
                "          \"recentProfileSettingsChange\": true\n" +
                "        }\n" +
                "      },\n" +
                "      \"genuineFactors\": {\n" +
                "        \"genuineLocation\": {\n" +
                "          \"consistentIP\": true\n" +
                "        }\n" +
                "      }\n" +
                "    }\n" +
                "  }\n" +
                "}";

        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode rootNode = objectMapper.readTree(jsonStr);
        List<String> trueKeys = new ArrayList<>();
        traverseJson(rootNode, trueKeys);
        // 输出结果
        System.out.println(trueKeys);
    }

    /**
     * 递归遍历JSON节点,收集所有值为true的键
     */
    private static void traverseJson(JsonNode node, List<String> result) {
        // 处理对象节点
        if (node.isObject()) {
            Iterator<Map.Entry<String, JsonNode>> fields = node.fields();
            while (fields.hasNext()) {
                Map.Entry<String, JsonNode> entry = fields.next();
                String key = entry.getKey();
                JsonNode value = entry.getValue();
                // 当前值为布尔类型且为true时收集键
                if (value.isBoolean() && value.asBoolean()) {
                    result.add(key);
                } else {
                    // 递归遍历子节点
                    traverseJson(value, result);
                }
            }
        }
        // 处理数组节点,兼容数组中嵌套对象的场景
        else if (node.isArray()) {
            for (JsonNode childNode : node) {
                traverseJson(childNode, result);
            }
        }
        // 其余类型(字符串、数字等)直接跳过
    }
}

输出结果

运行上述代码后输出的结果与需求完全一致:
[advancedKeyCombo, importData, recentProfileSettingsChange, consistentIP]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:45:02