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

浙公网安备 33010602011771号