下面是基于Json解析神器JsonPath的使用说明的详细攻略。
什么是JsonPath?
JsonPath是一个基于Java的Json解析库,它可以用于解析Json数据并提取其中的内容。JsonPath使用类似XPath的查询语法,并支持大部分XPath表达式,同时还有一些自己的表达式。
如何使用JsonPath
步骤一:引入依赖
要使用JsonPath,我们需要将相关依赖添加到项目中。假设我们使用Maven来构建项目,那么只需要在pom.xml文件中添加以下依赖即可:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.4.0</version>
</dependency>
步骤二:读取Json数据
在使用JsonPath解析Json数据之前,我们需要先将Json数据读取进来。JsonPath支持多种方式的Json数据输入,包括字符串、文件、URL和InputStream等。以读取一个Json文件为例,可以按照以下方式进行:
File jsonFile = new File("path/to/jsonfile.json");
String jsonStr = FileUtils.readFileToString(jsonFile,"UTF-8");
Object document = Configuration.defaultConfiguration().jsonProvider().parse(jsonStr);
这里用到了Apache Commons IO库来读取文件内容,如果你没有引入这个库,需要在pom.xml文件中添加以下依赖:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
步骤三:使用JsonPath表达式提取数据
有了Json数据之后,就可以使用JsonPath表达式提取数据了。JsonPath表达式以$符号开头,$符号代表Json数据的根节点。接下来是一些常用的JsonPath表达式:
- $:根节点
- .属性名:取子节点属性
- ['属性名']:同上
- [0]:取数组中第一个元素
- [start:end]:取数组中从start位置开始,直到end位置结束的所有元素,包括start和end位置
- ["
"]:根据键值对查找属性值
例如,假设我们有一个Json数据如下:
{
"store": {
"book": [
{
"category": "fiction",
"author": "J.K. Rowling",
"title": "Harry Potter and the Philosopher's Stone",
"price": 8.99
},
{
"category": "fiction",
"author": "J.R.R. Tolkien",
"title": "The Lord of the Rings",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
我们可以使用以下JsonPath表达式来提取数据:
- $.store.book[0].author:取第一本书的作者
- $.store.book[*].author:取所有书的作者
- $.store.book[?(@.price < 10)].title:取价格小于10的书的标题
- $.store.*:取store中所有的属性,包括book和bicycle
- $.store..price:取store中所有price属性
- $..book[?(@.author == 'J.K. Rowling')].title:根据作者查找书籍的标题
更多的JsonPath表达式可以参考这份文档。
示例一:使用JsonPath提取Github API返回的数据
假设我们想从Github API获取某个用户的repositories信息,并提取其中的名字和URL。首先我们需要发送一个HTTP GET请求获取用户repositories的Json数据,然后使用JsonPath表达式提取数据。具体代码如下:
String username = "githubusername";
String url = "https://api.github.com/users/" + username + "/repos";
String response = HttpUtil.get(url);
Object document = Configuration.defaultConfiguration().jsonProvider().parse(response);
List<String> names = JsonPath.read(document, "$..name");
List<String> urls = JsonPath.read(document, "$..html_url");
for (int i = 0; i < names.size(); i++) {
System.out.println(names.get(i) + ": " + urls.get(i));
}
这里用到了一个HttpUtil类来发送HTTP请求,你可以使用任何你熟悉的Http库来发送请求。示例结果如下:
GitHubAPI: https://github.com/username/GitHubAPI
OtherRepository: https://github.com/username/OtherRepository
示例二:使用JsonPath解析NBA比赛数据
假设我们想从NBA官网获取火箭队最近一场比赛的比分和对手,我们可以使用JsonPath解析官网提供的Json数据。具体代码如下:
String url = "https://china.nba.com/static/data/game/snapshot_0041800402.json";
String response = HttpUtil.get(url);
Object document = Configuration.defaultConfiguration().jsonProvider().parse(response);
String homeTeam = JsonPath.read(document, "$.payload.homeTeam.profile.city");
String homeScore = JsonPath.read(document, "$.payload.homeTeam.cumulativeScore");
String awayTeam = JsonPath.read(document, "$.payload.awayTeam.profile.city");
String awayScore = JsonPath.read(document, "$.payload.awayTeam.cumulativeScore");
System.out.println(homeTeam + " " + homeScore + ":" + awayScore + " " + awayTeam);
示例结果如下:
Houston 115:124 LA Clippers
好了,以上就是关于JsonPath的完整攻略了,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于json解析神器 jsonpath的使用说明 - Python技术站