Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java有条件地访问同一级别的JSONElement_Java_Json_Gson - Fatal编程技术网

使用Java有条件地访问同一级别的JSONElement

使用Java有条件地访问同一级别的JSONElement,java,json,gson,Java,Json,Gson,我有一个大而复杂的JSON对象,如下所示: { "FDN": [{ "OT": 1, "CL": [{ "K": [{ "FID": 348, "VAL": "20822548" }, { "FID": "LANGUAGE_ID", "VAL": "FR" }

我有一个大而复杂的JSON对象,如下所示:

{
    "FDN": [{
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822548"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "FR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969007,
        "DT": "20180504123302006"
    }, {
        "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": "20822550"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "FR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969009,
        "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": "20822552"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "FR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969011,
        "DT": "20180504123302009"
    }, {
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822553"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "FR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969012,
        "DT": "20180504123302010"
    }, {
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822554"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "FR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969013,
        "DT": "20180504123302010"
    }, {
        "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"
    }]
}
从这个,我只需要考虑这样的“CL”单元:

"CL": [{
                "K": [{
                    "FID": 348,
                    "VAL": "20822573"
                }, {
                    "FID": "LANGUAGE_ID",
                    "VAL": "AR"
                }]
            }],
并检查语言ID是否为“AR”,然后将对应键“FID:348”的相关值(20822573)添加到列表中。 只是前男友:

 if(LANGUAGE_ID.equals("AR")){
         IdList.add("20822573");
     }
我不能这样做,因为这两个关键是在同一水平

到目前为止,我的代码是:

public static void main(String[] a) throws IOException {
        FileReader jsonReader = new FileReader(new File("json.json"));
        Gson gson = new Gson();
        Map<String,String> fidMap = new HashMap<String, String>();
        JsonObject jsonObject = gson.fromJson(jsonReader, JsonObject.class);
        JsonArray fdnJsonArray = (JsonArray) jsonObject.get("FDN");

        fdnJsonArray.forEach(jsonElement -> {
            JsonArray clJsonArray = jsonElement.getAsJsonObject().get("CL").getAsJsonArray();
            clJsonArray.forEach(clJsonItem -> {
                JsonArray kJsonArray = clJsonItem.getAsJsonObject().get("K").getAsJsonArray();
                kJsonArray.forEach(kArrayElement -> {
                    String fid = kArrayElement.getAsJsonObject().get("FID").getAsString();
                    if(fid != null && !fid.isEmpty() && fid.equalsIgnoreCase("LANGUAGE_ID")) {
                        String val = kArrayElement.getAsJsonObject().get("VAL").getAsString();
                        System.out.println(fid + ":"+ val);
                    }
                });
            });
        });
    }
publicstaticvoidmain(字符串[]a)引发IOException{
FileReader jsonReader=newFileReader(新文件(“json.json”);
Gson Gson=新的Gson();
Map fidMap=新的HashMap();
JsonObject JsonObject=gson.fromJson(jsonReader,JsonObject.class);
JsonArray fdnJsonArray=(JsonArray)jsonObject.get(“FDN”);
fdnJsonArray.forEach(jsonElement->{
JsonArray clJsonArray=jsonElement.getAsJsonObject().get(“CL”).getAsJsonArray();
clJsonArray.forEach(clJsonItem->{
JsonArray kJsonArray=cljsonim.getAsJsonObject().get(“K”).getAsJsonArray();
kJsonArray.forEach(kArrayElement->{
字符串fid=kArrayElement.getAsJsonObject().get(“fid”).getAsString();
if(fid!=null&&!fid.isEmpty()&&fid.equalsIgnoreCase(“语言ID”)){
字符串val=kArrayElement.getAsJsonObject().get(“val”).getAsString();
系统输出打印项次(fid+“:”+val);
}
});
});
});
}
非常感谢你在这方面的帮助

考虑为此使用。 获取CL对象的这个特定问题的一个简单示例是
$…CL
。然后可以在普通java中操作返回的对象。
您可以在线快速创建原型。要进一步细化jsonpath以包含语言id,您可以查看此处的文档:

尝试了,但在language=“AR”时未能获得“id”(例如:20822573)。您仍然可以像已经做过的那样迭代结果,但直接从所需的元素开始。JsonPath返回JsonArray iirc。感谢您向我展示JsonPath的新方法。经过一番努力,终于解决了这个问题。很高兴听到这个消息!JsonPath对我来说也是一种尝试和错误的东西。