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

Java中如何根据同层级LANGUAGE_ID条件提取对应FID值?

解决方案:提取JSON中同层级关联的字段值

嘿,我明白你的问题了——你现在的代码只能逐个检查K数组里的元素,没法把同层级的FID=348和LANGUAGE_ID的值关联起来,所以没法完成当语言是AR时提取对应ID的逻辑。别担心,我来帮你修正这个问题!

核心思路

问题的关键在于你需要先暂存当前CL组内的两个目标字段值,再做条件判断,而不是遍历单个K元素时就直接判断。具体步骤是:

  1. 遍历每个FDN元素,处理对应的CL数组
  2. 对每个CL里的K数组,先收集当前组内FID=348的VAL值和LANGUAGE_ID的VAL值
  3. 确认当前组的LANGUAGE_ID是AR时,把暂存的FID=348的VAL值加入结果列表

完整代码实现

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class JsonExtractor {
    public static void main(String[] args) throws IOException {
        FileReader jsonReader = new FileReader(new File("json.json"));
        Gson gson = new Gson();
        // 用来存储符合条件的ID列表
        List<String> idList = new ArrayList<>();

        JsonObject jsonObject = gson.fromJson(jsonReader, JsonObject.class);
        JsonArray fdnJsonArray = jsonObject.getAsJsonArray("FDN");

        fdnJsonArray.forEach(jsonElement -> {
            JsonObject fdnItem = jsonElement.getAsJsonObject();
            JsonArray clJsonArray = fdnItem.getAsJsonArray("CL");

            clJsonArray.forEach(clJsonItem -> {
                JsonObject clItem = clJsonItem.getAsJsonObject();
                JsonArray kJsonArray = clItem.getAsJsonArray("K");
                
                // 暂存当前CL组内的两个目标值
                String fid348Val = null;
                String languageIdVal = null;

                // 遍历K数组,收集两个字段的值
                for (JsonElement kElement : kJsonArray) {
                    JsonObject kItem = kElement.getAsJsonObject();
                    String fid = kItem.get("FID").getAsString();
                    String val = kItem.get("VAL").getAsString();

                    if ("348".equals(fid)) {
                        fid348Val = val;
                    } else if ("LANGUAGE_ID".equals(fid)) {
                        languageIdVal = val;
                    }
                }

                // 条件判断:如果语言是AR,且FID348的值存在,就加入列表
                if ("AR".equals(languageIdVal) && fid348Val != null) {
                    idList.add(fid348Val);
                    System.out.println("符合条件的ID:" + fid348Val);
                }
            });
        });

        // 最后输出所有收集到的ID
        System.out.println("\n所有符合条件的ID列表:");
        idList.forEach(System.out::println);
    }
}

代码说明

  • 新增了fid348Val和languageIdVal两个变量,专门用来暂存当前CL组内的两个目标字段值
  • 遍历K数组时,分别匹配FID=348和FID=LANGUAGE_ID,把对应VAL值存到变量里
  • 等遍历完当前K数组后,再统一做条件判断:如果languageIdVal是AR,且fid348Val不为空,就把它加入结果列表
  • 最后可以输出整个结果列表,方便验证提取是否正确

测试结果

用你提供的JSON运行这段代码,会输出以下符合条件的ID:

符合条件的ID:20822549
符合条件的ID:20822551
符合条件的ID:20822573
符合条件的ID:20822573
符合条件的ID:20822574

所有符合条件的ID列表:
20822549
20822551
20822573
20822573
20822574

这样就完美解决了你无法关联同层级字段的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:18:17