You need to enable JavaScript to run this app. 使用Jackson与Map处理JSON时如何遍历嵌套结构数据
优惠活动
大模型
产品
解决方案
定价
更多

使用Jackson与Map处理JSON时如何遍历嵌套结构数据

你只需要逐层解析嵌套的JSON结构即可,这里提供两种常用的实现方案:

方案1:沿用Map解析逻辑(修改现有代码)

public void storeJsonToMap(List<MultipartFile> file) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    ArrayList<LanguageItem> languageItemList = new ArrayList<>();

    Map<String, Object> langMap = objectMapper.readValue(file.get(0).getBytes(), Map.class);
    // 取顶层lang字段
    String language = (String) langMap.get("lang");
    // 取data节点,本质是嵌套的Map结构,key为组件名,value为组件下的键值对Map
    Map<String, Map<String, String>> dataMap = (Map<String, Map<String, String>>) langMap.get("data");

    // 遍历所有组件
    for (Map.Entry<String, Map<String, String>> componentEntry : dataMap.entrySet()) {
        String componentName = componentEntry.getKey();
        Map<String, String> kvMap = componentEntry.getValue();
        // 遍历当前组件下所有键值对
        for (Map.Entry<String, String> kvEntry : kvMap.entrySet()) {
            String key = kvEntry.getKey();
            String value = kvEntry.getValue();
            // 替换为你实际的SK生成规则
            String sk = String.join("_", language, componentName, key);
            languageItemList.add(new LanguageItem(language, sk, componentName, key, value));
        }
    }
    // 后续可直接操作languageItemList入库
}

方案2:使用JsonNode解析(更安全,无需强转)

如果担心类型转换异常,推荐使用Jackson的JsonNode API实现遍历:

public void storeJsonToMap(List<MultipartFile> file) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    ArrayList<LanguageItem> languageItemList = new ArrayList<>();
    JsonNode rootNode = objectMapper.readTree(file.get(0).getBytes());

    // 取lang字段值
    String language = rootNode.get("lang").asText();
    JsonNode dataNode = rootNode.get("data");
    // 遍历data下所有组件节点
    var componentIterator = dataNode.fields();
    while (componentIterator.hasNext()) {
        var componentEntry = componentIterator.next();
        String componentName = componentEntry.getKey();
        JsonNode componentNode = componentEntry.getValue();
        // 遍历组件下所有键值对
        var kvIterator = componentNode.fields();
        while (kvIterator.hasNext()) {
            var kvEntry = kvIterator.next();
            String key = kvEntry.getKey();
            String value = kvEntry.getValue().asText();
            String sk = String.join("_", language, componentName, key);
            languageItemList.add(new LanguageItem(language, sk, componentName, key, value));
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 09:15:07