首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

  • 24-12-06 00:04
  • 4494
  • 8174
juejin.cn

在现代Web开发中,JSON(JavaScript Object Notation)已成为数据交换的标准格式。它以其简洁和易于阅读的结构受到广泛欢迎。然而,随着数据结构的复杂化,如何高效地从JSON中提取所需信息成为开发者面临的一个挑战。JSONPath应运而生,作为一种强大的查询工具,帮助开发者轻松地从JSON数据中提取信息。

1.什么是JSONPath?

JSONPath是一种用于JSON数据的查询语言,类似于XPath用于XML。它允许开发者使用一种类路径语法来导航和提取JSON文档中的数据。JSONPath的语法简单直观,使得即使是复杂的查询也能轻松实现。

2.JSONPath的基本语法

JSONPath的语法由一系列路径表达式组成,以下是一些常用的语法元素:

  • $:表示根元素。
  • .:用于访问子元素。
  • []:用于访问数组元素或过滤。
  • *:通配符,表示所有元素。
  • ..:递归下降,搜索所有子元素。
  • ?():用于过滤表达式。

3.JSONPath的优势

  • 简洁性:JSONPath的语法简洁明了,易于学习和使用。
  • 灵活性:支持复杂的查询和过滤操作,能够处理各种JSON结构。
  • 广泛支持:许多编程语言和工具都支持JSONPath,使其成为跨平台的解决方案。

4.代码工程

4.1. 添加依赖

如果你使用Maven构建项目,可以在pom.xml中添加以下依赖:

xml
代码解读
复制代码
<dependency> <groupId>com.jayway.jsonpathgroupId> <artifactId>json-pathartifactId> <version>2.8.0version> dependency>

4.2. 使用JsonPath解析JSON

假设我们有以下JSON数据:

css
代码解读
复制代码
{ "store": { "book": [ { "category": "fiction", "title": "The Great Gatsby", "price": 10.99 }, { "category": "non-fiction", "title": "Sapiens", "price": 15.99 } ], "bicycle": { "color": "red", "price": 19.95 } } }

我们可以使用JsonPath来提取数据:

swift
代码解读
复制代码
package com.et; import com.jayway.jsonpath.JsonPath; import java.util.List; public class JsonPathExample { public static void main(String[] args) { String jsonString = "{ \"store\": { \"book\": [ { \"category\": \"fiction\", \"title\": \"The Great Gatsby\", \"price\": 10.99 }, { \"category\": \"non-fiction\", \"title\": \"Sapiens\", \"price\": 15.99 } ], \"bicycle\": { \"color\": \"red\", \"price\": 19.95 } } }"; // Extract all book titles List<String> titles = JsonPath.read(jsonString, "$.store.book[*].title"); System.out.println("Book Titles: " + titles); // Extract books with a price less than 15 List<Object> cheapBooks = JsonPath.read(jsonString, "$.store.book[?(@.price < 15)]"); System.out.println("Cheap Books: " + cheapBooks); // Extract all prices in the store List<Double> prices = JsonPath.read(jsonString, "$.store..price"); System.out.println("Prices: " + prices); } }

4.3. 解析结果

  • 提取所有书籍的标题:使用路径$.store.book[*].title,返回所有书籍的标题。
  • 提取价格低于15的书籍:使用路径$.store.book[?(@.price < 15)],返回价格低于15的书籍对象。
  • 提取商店中所有物品的价格:使用路径$.store..price,返回所有价格。

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • github.com/Harries/spr…(jsonpath)

5.测试

  • 提取所有书籍的标题:

    • JSONPath:$.store.book[*].title
    • 结果:["The Great Gatsby", "Sapiens"]
  • 提取价格低于15的书籍:

    • JSONPath:$.store.book[?(@.price < 15)]
    • 结果:[{ "category": "fiction", "title": "The Great Gatsby", "price": 10.99 }]
  • 提取商店中所有物品的价格:

    • JSONPath:$.store..price
    • 结果:[10.99, 15.99, 19.95]

6.引用

  • github.com/json-path/J…
  • www.liuhaihua.cn/archives/71…
注:本文转载自juejin.cn的HBLOG的文章"https://juejin.cn/post/7444471396287414283"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

142
代码人生
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top