当前位置: 首页 > news >正文

JAVA:利用 JSONPath 操作JSON数据的技术指南

1、简述

JSONPath 是一种强大的工具,用于查询和操作 JSON 数据。类似于 SQL 的语法,它为处理复杂的 JSON 数据结构提供了简单且高效的解决方案。✨

代码样例:https://gitee.com/lhdxhl/springboot-example.git

本文将介绍 JSONPath 的基本语法,并通过详细的 Java 示例展示其实际应用。🚀

在这里插入图片描述


2、🌟 什么是 JSONPath?

JSONPath 是一种用于 JSON 文档的路径表达式语言,类似于 XPath(用于 XML)。它允许我们:

  • 提取 JSON 中的值
  • 过滤和操作数据
  • 遍历嵌套结构

基本语法规则:

JSONPath 表达式功能说明
$根对象
.[]访问子元素
*通配符,匹配所有元素
..递归搜索
?()过滤表达式
@当前元素

在使用 JSONPath 之前,需要添加其依赖。以下是 JSONPath 的 Maven 依赖:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.8.0</version>
</dependency>

3、✍️ Java 示例

在 Java 中,我们可以使用开源库 Jayway JSONPath 来实现 JSONPath 的功能。以下示例 JSON 数据:

{
  "store": {
    "book": [
      { "category": "fiction", "author": "John", "price": 10.99 },
      { "category": "science", "author": "Jane", "price": 12.99 },
      { "category": "fiction", "author": "George", "price": 8.99 }
    ],
    "bicycle": {
      "color": "red",
      "price": 99.99
    }
  }
}

3.1 基本查询

从 JSON 中获取所有书籍的类别。

import com.jayway.jsonpath.JsonPath;
import java.util.List;

public class JSONPathDemo {
    public static void main(String[] args) {
        String json = """
        {
          "store": {
            "book": [
              { "category": "fiction", "author": "John", "price": 10.99 },
              { "category": "science", "author": "Jane", "price": 12.99 },
              { "category": "fiction", "author": "George", "price": 8.99 }
            ]
          }
        }
        """;

        List<String> categories = JsonPath.read(json, "$.store.book[*].category");
        System.out.println("📚书籍类别: " + categories);
    }
}

输出:

📚书籍类别: [fiction, science, fiction]

3.2 过滤查询

获取价格大于 10 的书籍。

List<Map<String, Object>> expensiveBooks = JsonPath.read(json, "$.store.book[?(@.price > 10)]");
System.out.println("💰价格大于 10 的书籍: " + expensiveBooks);

输出:

💰价格大于 10 的书籍: [{category=fiction, author=John, price=10.99}, {category=science, author=Jane, price=12.99}]

3.3 递归搜索

获取所有价格字段。

List<Double> prices = JsonPath.read(json, "$.store..price");
System.out.println("💵所有价格: " + prices);

输出:

💵所有价格: [10.99, 12.99, 8.99, 99.99]

3.4 嵌套查询

获取自行车的颜色。

String color = JsonPath.read(json, "$.store.bicycle.color");
System.out.println("🚲自行车颜色: " + color);

输出:

🚲自行车颜色: red

3.5 结合 POJO 使用

将查询结果映射到 Java 对象中。

import com.fasterxml.jackson.databind.ObjectMapper;

class Book {
    private String category;
    private String author;
    private double price;

    // Getters and Setters
}

List<Book> books = JsonPath.parse(json).read("$.store.book[*]", new TypeRef<List<Book>>() {});
books.forEach(book -> System.out.println("📖书籍: " + book.getCategory() + " by " + book.getAuthor()));

4、🚀 高级用法

4.1 动态路径

根据用户输入动态生成 JSONPath 表达式。

String category = "fiction";
String jsonPath = String.format("$.store.book[?(@.category == '%s')]", category);
List<Map<String, Object>> result = JsonPath.read(json, jsonPath);
System.out.println("🔍查询结果: " + result);

4.2 自定义函数

通过扩展 JSONPath 的功能,实现复杂逻辑。

Configuration conf = Configuration.builder()
        .options(Option.DEFAULT_PATH_LEAF_TO_NULL)
        .functions(new CustomFunctions())
        .build();
DocumentContext context = JsonPath.using(conf).parse(json);

5、总结

JSONPath 是处理 JSON 数据的利器,其直观的语法和强大的功能使得 JSON 数据操作变得轻松自如。通过结合 Java 和第三方库,可以在各种场景下高效应用 JSONPath。

希望本文的内容对您有所帮助!🎉

相关文章:

  • 类的默认成员函数
  • 滤波---卡尔曼滤波
  • 《HarmonyOS Next开发进阶:打造功能完备的Todo应用华章》
  • USB有驱ID卡读卡器C#小程序开发
  • 【区块链安全 | 第二十三篇】单位和全局可用变量(一)
  • 基于Python的Django框架的手机购物商城管理系统
  • xcode项目配置只能竖屏显示
  • 【论文阅读】Dynamic Adversarial Patch for Evading Object Detection Models
  • Mac 本地化部署 dify
  • 031-valgrind
  • 栈迁移学习
  • 【Music】读取文件夹及子文件夹所有mp3按照bpm拷贝到不同文件夹
  • reuseport socket 查找的一致性 hash
  • CET-4增量表
  • 产教融合|暴雨技术专家执裁江苏省职业院校技能大赛
  • Android学习总结之RecyclerView补充篇
  • 项目中静态通讯方案
  • KingbaseES之列级强访问控制
  • 【LeetCode回溯】17. 电话号码的字母组合
  • Scikit-learn使用指南
  • 网店美工培训/广州seo工程师
  • 罗湖网站建设的公司哪家好/互联网广告代理可靠吗
  • wordpress能做分类信息网站/东营seo
  • 17zwd一起做网站教学视频/购买模板建站
  • 做网站挣钱/灰色关键词代发可测试
  • 万象城网站建设/seo整站优化更能准确获得客户