解析树形json数据,抽取部分关键属性形成新树

public class JsonTransformation {
    public static void main(String[] args) throws Exception {
        // 原始 JSON 数据
        String s = "jsonStr";
        String jsonString = JSON.toJSONString(s);
        JSONArray jsonArray = JSON.parseArray(s);
        JsonNode jsonNode = null;
        for (Object j : jsonArray) {
            String s1 = JSON.toJSONString(j);
            ObjectMapper objectMapper = new ObjectMapper();
            JsonNode rootNode = objectMapper.readTree(s1);
            String nodeName = rootNode.get("nodeName").asText();
            // 获取想要的某个节点
            if(nodeName.equals("计划编制模板树")){
                jsonNode = rootNode;
                break;
            }
        }

        // 使用 Jackson 解析 JSON
        // 构建新的 JSON 数据,只包含需要的属性
        JsonNode transformedJson = transformJson(jsonNode);
        String s2 = transformedJson.toString();
        JsonNode jn = transformedJson.get("children");
        JSONArray jsonArray1 = JSON.parseArray(jn.toString());
        System.out.println("jsonArray1 = " + jsonArray1);
        // 打印新的 JSON 数据
    }
    
     private static JsonNode transformJson(JsonNode originalJson) {
        // 遍历原始 JSON,选择性提取属性
        // 在这个例子中,我们只提取 id、parentId、children、nodeName 属性
        return transformNode(originalJson);
    }

    private static JsonNode transformNode(JsonNode node) {
        // 创建新的 JSON 节点,只包含需要的属性
        // 这里可以根据需要提取其他属性
        return new ObjectMapper().createObjectNode()
                .put("id", node.path("id").asText())
                .put("parentId", node.path("parentId").asText())
                .put("nodeName", node.path("nodeName").asText())
                .put("nodeCode", node.path("nodeCode").asText())
                .set("children", transformChildren(node.path("children")));
    }

    private static JsonNode transformChildren(JsonNode children) {
        // 遍历并转换子节点
        var transformedChildren = new ObjectMapper().createArrayNode();
        for (var child : children) {
            transformedChildren.add(transformNode(child));
        }
        return transformedChildren;
    }
}

json原始数据

 [{"id": "1729754616961","parentId": "0","children": [{"id": "172977033","parentId": "1729751816961","children": [{"id": "17326983169","parentId": "17297964033","createByName": "管理员","createDeptId": "100138","createDeptName": "11","updateByName": "管理员","nodeName": "C1","nodeOldName": null,"nodeCode": "c1","nodeType": null,"nodeSort": 1,"pathId": ".1816961.1964033.16252423169.","directoryTreeId": "172978099","nodeDepth": 2,"isSendNode": -1,"sendType": "","isFileNode": null,"fileType": "-1","pathName": ".项目.04.管理.C1.","projectDivisionType": "分部","projectDivisionTypeId": "2","isProjectDivision": 0,"projectDivisionCode": "2323","unitProject": "01.资料","childUnitProject": "04.管理","subproject": "","childSubproject": "","itemProject": "","cellOrInspectionLot": null,"cellOrInspectionLotId": "","isMajorProject": 0,"isKeyDivision": 0,"isImportantHidden": 0,"stakeMark": "","elevation": "","mainContractor": "","subcontractor": "","constructionUnit": "","supervisingUnit": "","fileNum": null,"nodeState": null,"tip": "","serviceType": "22532c8739a5","serviceTypeName": "产品化项目","isRole": -1,"isCollect": -1,"fileSize": "0","ifReceived": -1,"sendCompany": "","sendCompanyId": "","receivedCompany": "","receivedCompanyId": "","configureId": null},{"id": "04481","parentId": "179964033","createByName": "管理员","createDeptId": "1038","createDeptName": "11","updateByName": "管理员","nodeName": "C2","nodeOldName": null,"nodeCode": "c2","nodeType": null,"nodeSort": 2,"pathId": ".1729961.1729772033.17387604481.","directoryTreeId": "17297099","nodeDepth": 2,"isSendNode": -1,"sendType": "","isFileNode": null,"fileType": "-1","pathName": ".项目.04.管理.C2.","projectDivisionType": "分部","projectDivisionTypeId": "2","isProjectDivision": 0,"projectDivisionCode": "2222","unitProject": "01.资料","childUnitProject": "04.管理","subproject": "","childSubproject": "","itemProject": "","cellOrInspectionLot": null,"cellOrInspectionLotId": "","isMajorProject": 0,"isKeyDivision": 0,"isImportantHidden": 0,"stakeMark": "","elevation": "","mainContractor": "","subcontractor": "","constructionUnit": "","supervisingUnit": "","fileNum": null,"nodeState": null,"tip": "","serviceType": "2ef6722532c8739a5","serviceTypeName": "项目","isRole": -1,"isCollect": -1,"fileSize": "0","ifReceived": -1,"sendCompany": "","sendCompanyId": "","receivedCompany": "","receivedCompanyId": "","configureId": null}],"createByName": "管理员","createDeptId": "138","createDeptName": "11","updateByName": "管理员","nodeName": "04.管理","nodeOldName": null,"nodeCode": "roo004","nodeType": null,"nodeSort": 4,"pathId": ".17261.17297736033.","directoryTreeId": "172973828099","nodeDepth": 1,"isSendNode": -1,"sendType": "","isFileNode": null,"fileType": "-1","pathName": ".项目.04.管理.","projectDivisionType": "子单位","projectDivisionTypeId": "1","isProjectDivision": 0,"projectDivisionCode": "000004","unitProject": "01.资料","childUnitProject": "","subproject": "","childSubproject": "","itemProject": "","cellOrInspectionLot": null,"cellOrInspectionLotId": "","isMajorProject": 0,"isKeyDivision": 0,"isImportantHidden": 0,"stakeMark": "","elevation": "","mainContractor": "","subcontractor": "","constructionUnit": "","supervisingUnit": "","fileNum": null,"nodeState": null,"tip": "","serviceType": "2e4e22532c8739a5","serviceTypeName": "项目","isRole": -1,"isCollect": -1,"fileSize": "0","ifReceived": -1,"sendCompany": "","sendCompanyId": "","receivedCompany": "","receivedCompanyId": "","configureId": null}],"createByName": "管理员","createDeptId": "38","createDeptName": "11","updateByName": "管理员","nodeName": "项目","nodeOldName": null,"nodeCode": "testRootNode","nodeType": null,"nodeSort": 1,"pathId": ".1729791816961.","directoryTreeId": "17297528099","nodeDepth": 0,"isSendNode": -1,"sendType": "","isFileNode": null,"fileType": "-1","pathName": ".项目.","projectDivisionType": "单位","projectDivisionTypeId": "0","isProjectDivision": 0,"projectDivisionCode": "0000","unitProject": "","childUnitProject": "","subproject": "","childSubproject": "","itemProject": "","cellOrInspectionLot": null,"cellOrInspectionLotId": "","isMajorProject": null,"isKeyDivision": null,"isImportantHidden": null,"stakeMark": "","elevation": "","mainContractor": "","subcontractor": "","constructionUnit": "","supervisingUnit": "","fileNum": null,"nodeState": null,"tip": "","serviceType": "2ef2532c8739a5","serviceTypeName": 项目","isRole": -1,"isCollect": -1,"fileSize": "0","ifReceived": -1,"sendCompany": "","sendCompanyId": "","receivedCompany": "","receivedCompanyId": "","configureId": null},{"id": "17341726145","parentId": "0","children": [{"id": "173417709633","parentId": "173417326145","createByName": "测试","createDeptId": "105","createDeptName": "安全环保部","updateByName": "测试","nodeName": "C1","nodeOldName": null,"nodeCode": "progress-c1","nodeType": null,"nodeSort": 1,"pathId": ".1734178695.173417911709633.","directoryTreeId": "173417073793","nodeDepth": 1,"isSendNode": -1,"sendType": "","isFileNode": null,"fileType": "-1","pathName": ".计划编制模板树.C1.","projectDivisionType": "","projectDivisionTypeId": null,"isProjectDivision": -1,"projectDivisionCode": "","unitProject": "","childUnitProject": "","subproject": "","childSubproject": "","itemProject": "","cellOrInspectionLot": null,"cellOrInspectionLotId": "","isMajorProject": null,"isKeyDivision": null,"isImportantHidden": null,"stakeMark": "","elevation": "","mainContractor": "","subcontractor": "","constructionUnit": "","supervisingUnit": "","fileNum": null,"nodeState": null,"tip": "","serviceType": "2ef67212c8739a5","serviceTypeName": "项目","isRole": -1,"isCollect": -1,"fileSize": "0","ifReceived": -1,"sendCompany": "","sendCompanyId": "","receivedCompany": "","receivedCompanyId": "","configureId": null},{"id": "17341793248338","parentId": "1734126145","createByName": "测试","createDeptId": "135","createDeptName": "安全环保部","updateByName": "测试","nodeName": "C2","nodeOldName": null,"nodeCode": "progress-c2","nodeType": null,"nodeSort": 2,"pathId": ".17341786145.17341793298338.","directoryTreeId": "1737073793","nodeDepth": 1,"isSendNode": -1,"sendType": "","isFileNode": null,"fileType": "-1","pathName": ".计划编制模板树.C2.","projectDivisionType": "","projectDivisionTypeId": null,"isProjectDivision": -1,"projectDivisionCode": "","unitProject": "","childUnitProject": "","subproject": "","childSubproject": "","itemProject": "","cellOrInspectionLot": null,"cellOrInspectionLotId": "","isMajorProject": null,"isKeyDivision": null,"isImportantHidden": null,"stakeMark": "","elevation": "","mainContractor": "","subcontractor": "","constructionUnit": "","supervisingUnit": "","fileNum": null,"nodeState": null,"tip": "","serviceType": "2ef6721e22532c8739a5","serviceTypeName": 项目","isRole": -1,"isCollect": -1,"fileSize": "0","ifReceived": -1,"sendCompany": "","sendCompanyId": "","receivedCompany": "","receivedCompanyId": "","configureId": null}],"createByName": "测试","createDeptId": "1135","createDeptName": "安全环保部","updateByName": "测试","nodeName": "计划编制模板树","nodeOldName": null,"nodeCode": "-1","nodeType": null,"nodeSort": 1,"pathId": ".17341145.","directoryTreeId": "17327073793","nodeDepth": 0,"isSendNode": -1,"sendType": "","isFileNode": null,"fileType": "-1","pathName": ".计划编制模板树.","projectDivisionType": "","projectDivisionTypeId": null,"isProjectDivision": -1,"projectDivisionCode": "","unitProject": "","childUnitProject": "","subproject": "","childSubproject": "","itemProject": "","cellOrInspectionLot": null,"cellOrInspectionLotId": "","isMajorProject": null,"isKeyDivision": null,"isImportantHidden": null,"stakeMark": "","elevation": "","mainContractor": "","subcontractor": "","constructionUnit": "","supervisingUnit": "","fileNum": null,"nodeState": null,"tip": "","serviceType": "2ef672122532c8739a5","serviceTypeName": "项目","isRole": -1,"isCollect": -1,"fileSize": "0","ifReceived": -1,"sendCompany": "","sendCompanyId": "","receivedCompany": "","receivedCompanyId": "","configureId": null}]

处理后数据

 

{
"id": "173417826145",
"parentId": "0",
"nodeName": "计划编制模板树",
"nodeCode": "-1",
"children": [
{
"id": "173417913",
"parentId": "1734326145",
"nodeName": "C1",
"nodeCode": "progress-c1",
"children": []
},
{
"id": "173417998338",
"parentId": "173426145",
"nodeName": "C2",
"nodeCode": "progress-c2",
"children": []
}
]
}
由于原始数据与业务相关,所以对部分进行了修改,大体没什么影响

 

posted @ 2023-12-11 20:50  不想被举的栗子  阅读(20)  评论(0编辑  收藏  举报