Java中如何根据同层级LANGUAGE_ID条件提取对应FID值?
解决方案:提取JSON中同层级关联的字段值
嘿,我明白你的问题了——你现在的代码只能逐个检查K数组里的元素,没法把同层级的FID=348和LANGUAGE_ID的值关联起来,所以没法完成当语言是AR时提取对应ID的逻辑。别担心,我来帮你修正这个问题!
核心思路
问题的关键在于你需要先暂存当前CL组内的两个目标字段值,再做条件判断,而不是遍历单个K元素时就直接判断。具体步骤是:
- 遍历每个
FDN元素,处理对应的CL数组 - 对每个
CL里的K数组,先收集当前组内FID=348的VAL值和LANGUAGE_ID的VAL值 - 确认当前组的
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
相关产品推荐
相关产品推荐

