【Java】FastJson 利用JSONPath.eval快速获取目标json的属性值
一、需求场景:
JSON串格式化之后,JSON树的属性深度太长了
二、代码实现:
语法等效MySQL的JSON读取方式
方法调用的返回类型为Object,强转至String进行处理
/* 读取报告时间 */ Object reportDateEval = JSONPath.eval(jsonObject, "$.categories[0].children[0].data.timeStat.endTime"); String reportTime = reportDateEval.toString(); Date date = DateUtil.stringToDate(reportTime);
读取集合信息
返回类型还是按JSON串的方式处理,用一个具体类入参转换
Object vulnListJson = JSONPath.eval(jsonObject, "$.categories[3].children[0].data.vulns_info.vuln_distribution.vuln_list"); List<DbcpReportZipUtil.RT04Data> objects = JSON.parseArray(vulnListJson.toString(), DbcpReportZipUtil.RT04Data.class); for (DbcpReportZipUtil.RT04Data rt04Data : objects) { consumer.accept(ImpPtRecord.builder() .ptReportTime(date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()) .ptIssueIp(rt04Data.getTarget()) .ptIssueName(rt04Data.getI18n_name()) .ptIssueTag(rt04Data.getVuln_level()) .ptIssueDesc(String.join(", ", rt04Data.getI18n_description())) .build()); }