解析树形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": []
}
]
}
由于原始数据与业务相关,所以对部分进行了修改,大体没什么影响