多层级json,循环遍历,根据某一条件移除层级里面元素,用迭代器实现

多层级json如下,循环遍历,根据hasAuth 字段值移除层级里面元素,如果hasAuth值为false则移除该元素,可用迭代器或者用java8 的removeIf实现

{
    "state": 200,
    "code": 10,
    "data": [
        {
            "studyDeptNo": "1",
            "hasAuth": true,
            "gradeList": [
                {
                    "hasAuth": true,
                    "gradeName": "七年级",
                    "gradeNo": "21",
                    "classList": [
                        {
                            "hasAuth": true,
                            "classId": "514f0",
                            "academicYear": "2024",
                            "abbrName": "1班",
                            "classNo": "201",
                            "gradeNo": "21",
                            "className": "七(1)班",
                            "id": "514fac1b591611ef9a4a00163e172e25",
                            "trusteeshipName": "月托"
                        }
                    ]
                },
                {
                    "hasAuth": true,
                    "gradeName": "八年级",
                    "gradeNo": "2",
                    "classList": [
                        {
                            "hasAuth": true,
                            "classId": "860ffb",
                            "academicYear": "2024",
                            "abbrName": "1班",
                            "classNo": "232101",
                            "gradeNo": "22",
                            "className": "八(1)班",
                            "id": "8b68",
                            "trusteeshipName": "月托",
                            "classNameEn": ""
                        }
                    ]
                },
                {
                    "hasAuth": true,
                    "gradeName": "九年级",
                    "gradeNo": "23",
                    "classList": [
                        {
                            "hasAuth": true,
                            "classId": "3270b9ad0d4711edacdf00163e172e25",
                            "academicYear": "2024",
                            "abbrName": "九(1)班",
                            "classNo": "222101",
                            "gradeNo": "23",
                            "className": "九(1)班",
                            "id": "8b687b032f1f11ef9a4a00163e172e25",
                            "trusteeshipName": "月托",
                            "classNameEn": ""
                        },
                        {
                            "hasAuth": true,
                            "classId": "3271cd200d4711edacdf00163e172e25",
                            "academicYear": "2024",
                            "abbrName": "九(2)班",
                            "classNo": "222102",
                            "gradeNo": "23",
                            "className": "九(2)班",
                            "id": "8b6",
                            "trusteeshipName": "月托",
                            "classNameEn": ""
                        },
                        {
                            "hasAuth": true,
                            "classId": "3272",
                            "academicYear": "2024",
                            "abbrName": "3班",
                            "classNo": "203",
                            "gradeNo": "23",
                            "className": "3班",
                            "id": "8b68",
                            "trusteeshipName": "月托",
                            "classNameEn": ""
                        },
                        {
                            "hasAuth": true,
                            "classId": "3273e5f",
                            "academicYear": "2024",
                            "abbrName": "4班",
                            "classNo": "204",
                            "gradeNo": "23",
                            "className": "4班",
                            "id": "8b687e",
                            "trusteeshipName": "周托",
                            "classNameEn": ""
                        },
                        {
                            "hasAuth": true,
                            "classId": "0c4f0ae",
                            "academicYear": "2024",
                            "abbrName": "一班",
                            "classNo": "205",
                            "gradeNo": "23",
                            "className": "1班",
                            "id": "8b687f8",
                            "trusteeshipName": "周托",
                            "classNameEn": ""
                        }
                    ]
                }
            ],
            "studyDeptName": "初中部"
        }
    ]
}

用迭代器实现方法如下:

        if (!CollectionUtils.isEmpty(dataList)) {
            Iterator<JSONObject> iterator = dataList.iterator();
            while (iterator.hasNext()) {
                JSONObject next = iterator.next();
                if (!(Boolean) next.get("hasAuth")) {
                    iterator.remove();
                } else {
                    JSONArray gradeList = next.getJSONArray("gradeList");
                    if (!CollectionUtils.isEmpty(gradeList)) {
                        Iterator<Object> gradeIterator = gradeList.iterator();
                        while (gradeIterator.hasNext()) {
                            JSONObject grade = (JSONObject) gradeIterator.next();
                            if (!(Boolean) grade.get("hasAuth")) {
                                gradeIterator.remove();
                            } else {
                                JSONArray classList = grade.getJSONArray("classList");
                                if (!CollectionUtils.isEmpty(classList)) {
                                    Iterator<Object> iteratorClass = classList.iterator();
                                    while (iteratorClass.hasNext()) {
                                        JSONObject classJson = (JSONObject) iteratorClass.next();
                                        if (!(Boolean) classJson.get("hasAuth")) {
                                            iteratorClass.remove();
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

用java8 removeIf 实现

    private static void removeNodeByHasAuth(List<JSONObject> dataList) {
        if (!CollectionUtils.isEmpty(dataList)) {
            dataList.removeIf(x-> {
                if (!(Boolean)x.get("hasAuth")) {
                    return true;
                }else {
                    JSONArray gradeList = x.getJSONArray("gradeList");
                    if (!CollectionUtils.isEmpty(gradeList)){
                        gradeList.removeIf(y-> {
                            JSONObject grade = (JSONObject)y;
                            if (!(Boolean)grade.get("hasAuth")) {
                                return true;
                            }else{
                                JSONArray classList = grade.getJSONArray("classList");
                                if (!CollectionUtils.isEmpty(classList)){
                                    classList.removeIf(z->{
                                        JSONObject classJson = (JSONObject) z;
                                        if (!(Boolean)classJson.get("hasAuth")){
                                            return true;
                                        }
                                        return false;
                                    });
                                }
                            }
                            return false;
                        });
                    }
                }
                return false;
            });
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值