FastJSON 是阿里巴巴开源的一个高性能的 JSON 处理库,它也支持 JSONPath 语法,允许你通过 JSONPath 表达式在 JSON 数据中快速定位和提取特定的数据。以下是阿里 FastJSON 中 JSONPath 的常见用法及示例:
1. 添加依赖
如果你使用的是 Maven 项目,在 pom.xml
中添加 FastJSON 的依赖:
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.33</version>
</dependency>
2. 基本用法示例
示例 JSON 数据
{"store": {"book": [{"category": "reference","author": "Nigel Rees","title": "Sayings of the Century","price": 8.95},{"category": "fiction","author": "Evelyn Waugh","title": "Sword of Honour","price": 12.99},{"category": "fiction","author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99},{"category": "fiction","author": "J. R. R. Tolkien","title": "The Lord of the Rings","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "red","price": 19.95}},"expensive": 10
}
2.1 获取单个节点的值
可以使用 JSONPath.eval
方法根据 JSONPath 表达式获取单个节点的值。例如,获取 store.bicycle.color
的值:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath;public class FastJsonPathExample {public static void main(String[] args) {String jsonStr = "{...}"; // 上述示例 JSON 数据JSONObject jsonObject = JSON.parseObject(jsonStr);// 获取 store.bicycle.color 的值Object color = JSONPath.eval(jsonObject, "$.store.bicycle.color");System.out.println("Bicycle color: " + color);}
}
2.2 获取数组中的元素
可以通过索引获取数组中的特定元素。例如,获取 store.book
数组中的第一个元素:
// 获取 store.book 数组中的第一个元素
Object firstBook = JSONPath.eval(jsonObject, "$.store.book[0]");
System.out.println("First book: " + firstBook);
2.3 过滤数组元素
使用过滤表达式筛选数组中的元素。例如,获取价格低于 expensive
值的书籍:
// 获取价格低于 expensive 值的书籍
Object cheapBooks = JSONPath.eval(jsonObject, "$.store.book[?(@.price < $.expensive)]");
System.out.println("Cheap books: " + cheapBooks);
2.4 递归查找
使用递归通配符 ..
可以递归查找所有匹配的节点。例如,查找所有 author
字段的值:
// 查找所有 author 字段的值
Object allAuthors = JSONPath.eval(jsonObject, "$..author");
System.out.println("All authors: " + allAuthors);
3. 修改 JSON 数据
FastJSON 的 JSONPath 还支持修改 JSON 数据。例如,将 store.bicycle.color
的值修改为 blue
:
// 修改 store.bicycle.color 的值为 blue
JSONPath.set(jsonObject, "$.store.bicycle.color", "blue");
System.out.println("Modified JSON: " + jsonObject.toJSONString());
4. 总结
FastJSON 的 JSONPath 功能提供了强大而灵活的方式来处理 JSON 数据。通过使用不同的 JSONPath 表达式,你可以方便地定位、提取和修改 JSON 数据中的特定部分。在实际应用中,根据具体的 JSON 结构和需求,合理运用这些功能可以提高开发效率。需要注意的是,虽然 FastJSON 功能强大,但在使用时要关注其安全性,特别是在处理不可信的输入时。