需求描述
Java方法实现以data.info.author.name,value
格式做传入参数读取json深层次的信息,而不用一级一级地去遍历Json对象。
代码实现
方法代码
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
public static String getValueByPath(JSONObject json, String path) {
if (json == null || path == null) {
return null;
}
String[] keys = path.split("\\.");
JSONObject currentNode = json;
for (String key : keys) {
if (currentNode.containsKey(key)) {
Object value = currentNode.get(key);
if (value instanceof JSONObject) {
currentNode = (JSONObject) value;
} else {
// 当遇到非JSONObject时,返回当前层级的值
return value.toString();
}
} else {
// 如果路径中的key不存在,则返回null
return null;
}
}
// 返回最深层次的值
return JSON.toJSONString(currentNode);
}
方法参数说明
这个方法中传参的json是使用com.alibaba.fastjson
解析后的JSON对象,不是字符串:
JSONObject json= JSON.parseObject(jsonStr);
代码使用的依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.9.graal</version>
</dependency>
Alibaba Fastjson 是一款由阿里巴巴集团开发的高性能、功能全面的 Java 语言编写的 JSON 处理工具包。Fastjson
主要功能包括:
序列化(Serialization):能够将 Java 对象转换成 JSON 字符串,支持将 Java Bean、Collection 类型的数据结构及其他常见类型转换为符合 JSON 格式规范的字符串。
反序列化(Deserialization):将 JSON 字符串还原为 Java 对象,即从 JSON 文本中解析出对应的 Java Bean 或数组、集合等对象。
高性能:Fastjson 以其高效的内存管理和独特的算法著称,声称在 JSON 解析和生成方面的性能优于其他大部分 Java JSON 库。它采用了诸如“假定有序快速匹配”等技术优化解析性能。
轻量级:Fastjson 体积小巧,易于集成到项目中,对资源占用较低,适合于高并发和大数据量的场景。
测试
原始数据示例
假设有一json字符串是这样的多级结构:
使用本方法获取的示例代码是:
public class UtilsTest {
// 使用示例
public static void main(String[] args) {
String jsonStr = "{\"data\":{\"info\":{\"author\":{\"name\":{\"value\":\"Kelvin,Welcome to 1024!\"}}}}}";
JSONObject jsonObject = JSON.parseObject(jsonStr);
String value = FileUtils.getValueByPath(jsonObject, "data.info.author.name.value");
System.out.println("Get INFO: " + value); // 输出GET INFO: Kelvin,Welcome to 1024!
}
}
查询结果
可以使用多级点连接查询到正确结果了,这特别适合与深度嵌套的json数据获取。