# Hutool
# 简介
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
# 使用Hutool进行json解析
{
"root":{
"level1":{
"level2-1":{
"level2-1-1":"test1"
},
"level2-2":{
"level2-2-1":"test2"
},
"level2-3":{
"level2-4":"test3"
},
"level2-4":[
{
"level2-4-1":"test4"
},
{
"level2-4-2":"test5"
}
]
}
}
}
要解析这么一个json文件,去取出level2-4中的内容,可能好几种方式
"level2-4":[
{
"level2-4-1":"test4"
},
{
"level2-4-2":"test5"
}
]
几种方式
- 定义一个pojo类去接收,但如果root不是一个确定的字符串,而是一个常量就有点行不通了。
- 也可以将这个json字符串转化为com.fasterxml.jackson.databind.JsonNode, 然后使用findValue去查询。但我故意在level2-3节点下,也放了一个level2-4,那么findValue找到的是哪一个呢,很明显被截胡了。
- 当然我们也可以一级一级的去解析,这比较麻烦。
- 今天推荐用hutools去解析,使用getByPath方法。之所以使用Optional.ofNullable,适应于字符串为空的情况下,也不会报错。
import java.util.Optional;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
// level2-4 root.level1.level2-1.level2-4
String seriesPath = "root.level1.level2-1.level2-4";
Optional<JSONArray> optional = Optional.ofNullable(str)
.map(JSONUtil::parse)
.map(json -> JSONUtil.parseArray(json.getByPath(seriesPath)));