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

苏州吴中区建设局工程网站柯桥网站建设

苏州吴中区建设局工程网站,柯桥网站建设,正规绍兴网站建设公司,会员管理系统手机免费版场景 若依前后端分离版手把手教你本地搭建环境并运行项目: 若依前后端分离版手把手教你本地搭建环境并运行项目_前后端分离项目本地运行-CSDN博客 在上面搭建SpringBoot项目的基础上,并且在项目中引入fastjson、hutool等所需依赖后。 Jayway JsonPat…

场景

若依前后端分离版手把手教你本地搭建环境并运行项目:

若依前后端分离版手把手教你本地搭建环境并运行项目_前后端分离项目本地运行-CSDN博客

在上面搭建SpringBoot项目的基础上,并且在项目中引入fastjson、hutool等所需依赖后。

Jayway JsonPath:

GitHub - json-path/JsonPath: Java JsonPath implementation

A Java DSL for reading JSON documents

需要对接第三方接口,接口返回的json数据需要解析获取数据。

可以通过配置每个返回字段的对应json数据的表达式,使其在代码中根据配置的表达式动态获取。

注:

博客:
霸道流氓气质_C#,架构之路,SpringBoot-CSDN博客

实现

1、添加项目依赖

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

2、JsonPath表达式引用JSON结构的方式与XPath表达式与XML文档结合使用的方式相同。

采用接口模拟工具模拟官方提供的示例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
}

3、快速开始

解析上面json数据中所有book节点的author字段信息

List<String> authors = JsonPath.read(body, "$.store.book[*].author");

获取第一本书的title字段

String title = JsonPath.read(body, "$['store']['book'][0]['title']");

也可以这样写

String title2 = JsonPath.read(body, "$.store.book[0].title");

获取所有book的数量

Integer number = JsonPath.read(body, "$..book.length()");

获取所有价格大于10的book

List<Map<String, Object>> expensiveBooks= JsonPath.read(body, "$.store.book[?(@.price > 10)]");

4、Json Path的语法较多,各种符号、函数、过滤等可参考官方文档。

下面记录一个读取json数据中指定结构的list数据。

首先需要读取所有book的数量,然后遍历循环,再通过配置的json数据的映射关系

获取配置的映射关系的表达式,进而解析获取对应字段的数据。

            int dataSize = JsonPath.read(body, "$..book.length()");JSONObject mapping = JSON.parseObject("{\"title\":\"$.store.book[%d].title\",\"author\":\"$.store.book[%d].author\"}");for (int i = 0; i < dataSize; i++) {String titleName = mapping.containsKey("title") ? JsonPath.read(body, String.format(mapping.getString("title"), i)).toString() : null;System.out.println(titleName);String author = mapping.containsKey("author") ? JsonPath.read(body, String.format(mapping.getString("author"), i)).toString() : null;System.out.println(author);}

其中JSON.parseObject是引用的fastjson。

单元测试结果

5、完整单元测试示例代码

​
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jayway.jsonpath.JsonPath;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import java.util.Map;@RunWith(SpringRunner.class)
@SpringBootTest(classes = RuoYiApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class JsonPathTest {@Testpublic void getData() {String body = "";try {//模拟获取接口数据body = HttpRequest.get("http://127.0.0.1:4523/m1/2858210-0-default/testJsonPath").timeout(20000).execute().body();//获取book的所有autherList<String> authors = JsonPath.read(body, "$.store.book[*].author");System.out.println(authors);//第一本book的titleString title = JsonPath.read(body, "$['store']['book'][0]['title']");String title2 = JsonPath.read(body, "$.store.book[0].title");System.out.println(title);System.out.println(title2);//所有book 的数量Integer number = JsonPath.read(body, "$..book.length()");System.out.println(number);//获取所有价格大于10的bookList<Map<String, Object>> expensiveBooks= JsonPath.read(body, "$.store.book[?(@.price > 10)]");System.out.println(expensiveBooks);//根据配置的json数据的映射关系,获取指定表达式下的数据int dataSize = JsonPath.read(body, "$..book.length()");JSONObject mapping = JSON.parseObject("{\"title\":\"$.store.book[%d].title\",\"author\":\"$.store.book[%d].author\"}");for (int i = 0; i < dataSize; i++) {String titleName = mapping.containsKey("title") ? JsonPath.read(body, String.format(mapping.getString("title"), i)).toString() : null;System.out.println(titleName);String author = mapping.containsKey("author") ? JsonPath.read(body, String.format(mapping.getString("author"), i)).toString() : null;System.out.println(author);}} catch (Exception e) {e.printStackTrace();}}
}​

http://www.yayakq.cn/news/51080/

相关文章:

  • 成都响应网站建设帮人做网站收多少钱
  • 做室内设计人喜欢的网站免费源码大全无用下载
  • 贵阳模板建站定制手机软件怎么写出来的啊
  • 做网站送邮箱单位网站设计制作
  • 网站开发实战 王徐州网站制作费用
  • 选择网站做友情链接的标准一般是如何查询商标是否已经被注册
  • 无锡网站制作电话睿思设计
  • 网站google排名出现过几分钟定制网站开发哪家好
  • 重庆市建设厅网站首页学校ui设计培训
  • 第三方平台网站的建设规划安装宝塔之后wordpress首页打不开
  • 兰州专业做网站的公司有哪些内蒙古高等级公路建设开发有限责任公司网站
  • 做整站优化呼叫中心系统源码
  • 涉县移动网站建设推广网站概况
  • 做现货黄金网站凡客集团
  • 给人做网站网站犯法嘛手机网站开发 视频教程
  • 提供建站服务的网络公司的比较俄罗斯搜索引擎浏览器官网入口
  • 一套网站设计多少钱龙溪网站建设企业
  • 第三方商城网站建设网站哪个做的好
  • 心理咨询 网站模版做软件开发视频网站
  • 网站开发策略jsp网站开发步骤
  • 网站怎么发内容优化网站开发与经营
  • 互联网网站备案流程常州网站建设策划
  • 安徽省校园网站建设想自己做一个网站应该怎么弄
  • 学校网站源码建设局下属单位
  • 青岛百度整站优化服务wordpress 评论框美化
  • 江西网站优化邯郸网站推广怎么做
  • 坪山网站建设平台网站推广无锡
  • 网站建设拍金手指谷哥14公司展厅设计费
  • 襄阳行业网站建设30岁学前端开发是不是晚了
  • 江阴做网站哪家好影楼修图用什么软件