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

如何使用GSON筛选JSON中LANGUAGE_ID为AR的元素?

用GSON筛选包含指定LANGUAGE_ID的JSON元素

我来帮你完成这个筛选功能,先明确你的JSON结构层级,这样能准确遍历到目标字段:

  • 根对象 → "FDN" 数组(每个元素是一条新闻条目)
  • 每个FDN条目 → "CL" 数组(每个CL元素存储键值对集合)
  • 每个CL元素 → "K" 数组(存放FID和VAL的键值对)

你的现有代码只获取了CL数组的首个元素,没有完成全层级遍历和筛选逻辑。下面是完整的实现代码,附带详细注释:

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.ArrayList;
import java.util.List;

public class JsonFilterExample {
    public static void main(String[] args) {
        // 假设convertedObject是已经解析好的根JsonObject
        JsonObject rootObject = (JsonObject) convertedObject;
        JsonArray fdnArray = rootObject.getAsJsonArray("FDN");
        
        // 存储符合条件的FDN元素
        List<JsonObject> filteredFdnElements = new ArrayList<>();
        
        // 遍历FDN数组中的每个条目
        for (JsonElement fdnElement : fdnArray) {
            if (!fdnElement.isJsonObject()) {
                continue; // 跳过非对象类型的元素
            }
            JsonObject fdnObj = fdnElement.getAsJsonObject();
            
            // 获取CL数组
            JsonElement clElement = fdnObj.get("CL");
            if (clElement == null || !clElement.isJsonArray()) {
                continue; // 如果CL不存在或不是数组,直接跳过
            }
            JsonArray clArray = clElement.getAsJsonArray();
            
            // 标记当前FDN条目是否符合筛选条件
            boolean isMatch = false;
            
            // 遍历CL数组中的每个元素
            for (JsonElement clItem : clArray) {
                if (!clItem.isJsonObject()) {
                    continue;
                }
                JsonObject clObj = clItem.getAsJsonObject();
                
                // 获取K数组
                JsonElement kElement = clObj.get("K");
                if (kElement == null || !kElement.isJsonArray()) {
                    continue;
                }
                JsonArray kArray = kElement.getAsJsonArray();
                
                // 遍历K数组,检查是否存在目标键值对
                for (JsonElement kItem : kArray) {
                    if (!kItem.isJsonObject()) {
                        continue;
                    }
                    JsonObject kObj = kItem.getAsJsonObject();
                    
                    String fid = kObj.get("FID").getAsString();
                    String val = kObj.get("VAL").getAsString();
                    
                    // 匹配目标条件:FID为"LANGUAGE_ID"且VAL为"AR"
                    if ("LANGUAGE_ID".equals(fid) && "AR".equals(val)) {
                        isMatch = true;
                        break; // 找到匹配,跳出K数组循环
                    }
                }
                
                if (isMatch) {
                    break; // 找到匹配,跳出CL数组循环
                }
            }
            
            // 如果当前FDN条目符合条件,加入结果列表
            if (isMatch) {
                filteredFdnElements.add(fdnObj);
            }
        }
        
        // 输出筛选结果
        System.out.println("筛选出的AR语言条目数量:" + filteredFdnElements.size());
        for (JsonObject obj : filteredFdnElements) {
            System.out.println(obj.toString());
        }
    }
}

代码说明:

  1. 全层级遍历:从根对象开始,依次遍历FDN → CL → K数组,确保不会遗漏任何嵌套层级的元素。
  2. 异常防护:每一步都加入了类型判断和空值检查,避免出现NullPointerException或类型转换异常。
  3. 高效匹配:一旦在某个FDN条目中找到符合条件的键值对,就立即跳出内层循环,提升遍历效率。
  4. 结果收集:将所有符合条件的FDN条目存入列表,方便后续的业务处理或输出。

预期输出:

运行代码后,你会得到所有包含阿拉伯语(AR)的新闻条目,示例如下:

{"OT":1,"CL":[{"K":[{"FID":348,"VAL":"20822549"},{"FID":"LANGUAGE_ID","VAL":"AR"}]}],"NK":null,"SS":0,"ITID":"NEWS","TSID":44969008,"DT":"20180504123302007"}
{"OT":1,"CL":[{"K":[{"FID":348,"VAL":"20822551"},{"FID":"LANGUAGE_ID","VAL":"AR"}]}],"NK":null,"SS":0,"ITID":"NEWS","TSID":44969010,"DT":"20180504123302008"}
{"OT":1,"CL":[{"K":[{"FID":348,"VAL":"20822573"},{"FID":"LANGUAGE_ID","VAL":"AR"}]}],"NK":null,"SS":0,"ITID":"NEWS","TSID":44969065,"DT":"20180504080929368"}
{"OT":0,"CL":[{"K":[{"FID":348,"VAL":"20822573"},{"FID":"LANGUAGE_ID","VAL":"AR"}]}],"NK":null,"SS":0,"ITID":"NEWS","TSID":44969066,"DT":"20180504080929369"}
{"OT":1,"CL":[{"K":[{"FID":348,"VAL":"20822574"},{"FID":"LANGUAGE_ID","VAL":"AR"}]}],"NK":null,"SS":0,"ITID":"NEWS","TSID":44969067,"DT":"20180504082130104"}

内容的提问来源于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:21