Fastjson JSONPath 用法

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 功能强大,但在使用时要关注其安全性,特别是在处理不可信的输入时。

posted @   向着朝阳  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示