java解析json复杂数据的第三种思路

文章目录

  • 一、概述
  • 二、数据预览
    • 1. 接口json数据
    • 2. json转xml数据
  • 三、代码实现
    • 1. pom.xml
    • 2. 核心代码
    • 3. 运行结果
  • 四、源码传送

一、概述

接上篇 java解析json复杂数据的两种思路
我们已经通过解析返回json字符串得到数据,现在改变思路, 按照如下流程获取数据:

接口API获取JSON
JSON转XML
dom4j使用XPath解析xml

二、数据预览

1. 接口json数据

https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=5&businessType=blog&username=qq_16127313

{"code":200,"message":"success","traceId":"cec7dfb0-78f4-40c4-b1ce-7463b100e3fd","data":{"list":[{"articleId":135418954,"title":"java解析json复杂数据的两种思路","description":"萌新小明最近新开了CSDN博客,蠢蠢欲动,迫不及待的发表了几篇工作中积累下来的解决问题的涂鸦之作,看着访问量慢慢涨起来,心中暗暗窃喜。现在小明想每天23点记录一下每篇文章的访问量。。。","url":"https://blog.csdn.net/qq_16127313/article/details/135418954","type":1,"top":false,"forcePlan":false,"viewCount":947,"commentCount":0,"editUrl":"https://editor.csdn.net/md?articleId=135418954","postTime":"2024-01-06 14:11:40","diggCount":16,"formatTime":"前天 14:11","picList":["https://img-blog.csdnimg.cn/direct/a409a0f4555c459fa05c00fd9ee0ea8c.png"],"collectCount":21},{"articleId":135244727,"title":"java lambda表达式训练题一","description":"Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。","url":"https://blog.csdn.net/qq_16127313/article/details/135244727","type":1,"top":false,"forcePlan":false,"viewCount":1238,"commentCount":0,"editUrl":"https://editor.csdn.net/md?articleId=135244727","postTime":"2023-12-27 18:07:30","diggCount":7,"formatTime":"2023.12.27","picList":["https://img-blog.csdnimg.cn/direct/d59c68b950754e879914b5319cd1b53f.png"],"collectCount":8},{"articleId":135173565,"title":"二维码初体验 com.google.zxing 实现续 - web api封装","description":"在 二维码初体验 com.google.zxing 实现 我们实现了二维码的生成,但是大部分情况下,二维码的相关功能是作为API接口来提供服务的。我们下面便演示在springboot、Knife4j下封装api接口来实现二维码生成功能。如何使用下面的备份文件恢复成原始的项目代码,请移步查阅:神奇代码恢复工具-over-","url":"https://blog.csdn.net/qq_16127313/article/details/135173565","type":1,"top":false,"forcePlan":false,"viewCount":1904,"commentCount":0,"editUrl":"https://editor.csdn.net/md?articleId=135173565","postTime":"2023-12-23 20:17:11","diggCount":23,"formatTime":"2023.12.23","picList":["https://img-blog.csdnimg.cn/direct/f0c994ca789a495a8c8c03d86d626f24.jpeg"],"collectCount":23},{"articleId":135167613,"title":"二维码初体验 com.google.zxing 实现","description":"Java 操作二维码的开源项目很多,如 SwetakeQRCode、BarCode4j、Zxing 等,这边以Zxing 为例进行介绍。选择需要生成QR原始文件,支持 “清除空白行及空格” 以减少二维码图片大小。支持输入文本内容,直接生成二维码代码结构QrCodeUI: 完整版本代码SimpleQrCodeUI:简化版本代码如何使用下面的备份文件恢复成原始的项目代码,请移步查阅:神奇代码恢复工具-over-","url":"https://blog.csdn.net/qq_16127313/article/details/135167613","type":1,"top":false,"forcePlan":false,"viewCount":1286,"commentCount":0,"editUrl":"https://editor.csdn.net/md?articleId=135167613","postTime":"2023-12-23 13:52:23","diggCount":6,"formatTime":"2023.12.23","picList":["https://img-blog.csdnimg.cn/direct/d3eeac85857543869dce8967c570bdc4.jpeg"],"collectCount":11},{"articleId":135135799,"title":"【随笔】MD5加密字符串、文件apache、springframework实现","description":"【代码】【随笔】MD5加密字符串、文件commons-codec、springframework实现。","url":"https://blog.csdn.net/qq_16127313/article/details/135135799","type":1,"top":false,"forcePlan":false,"viewCount":1721,"commentCount":0,"editUrl":"https://editor.csdn.net/md?articleId=135135799","postTime":"2023-12-21 17:29:54","diggCount":9,"formatTime":"2023.12.21","picList":["https://img-blog.csdnimg.cn/direct/dc26b7f1c731494f80c8c3b3badfa95d.jpeg"],"collectCount":9}],"total":72}
}

2. json转xml数据

<?xml version="1.0" encoding="UTF-8"?>
<root><code>200</code><message>success</message><traceId>cec7dfb0-78f4-40c4-b1ce-7463b100e3fd</traceId><data><list><articleId>135418954</articleId><title>java解析json复杂数据的两种思路</title><description>萌新小明最近新开了CSDN博客,蠢蠢欲动,迫不及待的发表了几篇工作中积累下来的解决问题的涂鸦之作,看着访问量慢慢涨起来,心中暗暗窃喜。现在小明想每天23点记录一下每篇文章的访问量。。。</description><url>https://blog.csdn.net/qq_16127313/article/details/135418954</url><type>1</type><top>false</top><forcePlan>false</forcePlan><viewCount>947</viewCount><commentCount>0</commentCount><editUrl>https://editor.csdn.net/md?articleId=135418954</editUrl><postTime>2024-01-06 14:11:40</postTime><diggCount>16</diggCount><formatTime>前天 14:11</formatTime><picList>https://img-blog.csdnimg.cn/direct/a409a0f4555c459fa05c00fd9ee0ea8c.png</picList><collectCount>21</collectCount></list><list><articleId>135244727</articleId><title>java lambda表达式训练题一</title><description>Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。</description><url>https://blog.csdn.net/qq_16127313/article/details/135244727</url><type>1</type><top>false</top><forcePlan>false</forcePlan><viewCount>1238</viewCount><commentCount>0</commentCount><editUrl>https://editor.csdn.net/md?articleId=135244727</editUrl><postTime>2023-12-27 18:07:30</postTime><diggCount>7</diggCount><formatTime>2023.12.27</formatTime><picList>https://img-blog.csdnimg.cn/direct/d59c68b950754e879914b5319cd1b53f.png</picList><collectCount>8</collectCount></list><list><articleId>135173565</articleId><title>二维码初体验 com.google.zxing 实现续 - web api封装</title><description>在 二维码初体验 com.google.zxing 实现 我们实现了二维码的生成,但是大部分情况下,二维码的相关功能是作为API接口来提供服务的。我们下面便演示在springboot、Knife4j下封装api接口来实现二维码生成功能。如何使用下面的备份文件恢复成原始的项目代码,请移步查阅:神奇代码恢复工具-over-</description><url>https://blog.csdn.net/qq_16127313/article/details/135173565</url><type>1</type><top>false</top><forcePlan>false</forcePlan><viewCount>1904</viewCount><commentCount>0</commentCount><editUrl>https://editor.csdn.net/md?articleId=135173565</editUrl><postTime>2023-12-23 20:17:11</postTime><diggCount>23</diggCount><formatTime>2023.12.23</formatTime><picList>https://img-blog.csdnimg.cn/direct/f0c994ca789a495a8c8c03d86d626f24.jpeg</picList><collectCount>23</collectCount></list><list><articleId>135167613</articleId><title>二维码初体验 com.google.zxing 实现</title><description>Java 操作二维码的开源项目很多,如 SwetakeQRCode、BarCode4j、Zxing 等,这边以Zxing 为例进行介绍。选择需要生成QR原始文件,支持 “清除空白行及空格” 以减少二维码图片大小。支持输入文本内容,直接生成二维码代码结构QrCodeUI: 完整版本代码SimpleQrCodeUI:简化版本代码如何使用下面的备份文件恢复成原始的项目代码,请移步查阅:神奇代码恢复工具-over-</description><url>https://blog.csdn.net/qq_16127313/article/details/135167613</url><type>1</type><top>false</top><forcePlan>false</forcePlan><viewCount>1286</viewCount><commentCount>0</commentCount><editUrl>https://editor.csdn.net/md?articleId=135167613</editUrl><postTime>2023-12-23 13:52:23</postTime><diggCount>6</diggCount><formatTime>2023.12.23</formatTime><picList>https://img-blog.csdnimg.cn/direct/d3eeac85857543869dce8967c570bdc4.jpeg</picList><collectCount>11</collectCount></list><list><articleId>135135799</articleId><title>【随笔】MD5加密字符串、文件apache、springframework实现</title><description>【代码】【随笔】MD5加密字符串、文件commons-codec、springframework实现。</description><url>https://blog.csdn.net/qq_16127313/article/details/135135799</url><type>1</type><top>false</top><forcePlan>false</forcePlan><viewCount>1721</viewCount><commentCount>0</commentCount><editUrl>https://editor.csdn.net/md?articleId=135135799</editUrl><postTime>2023-12-21 17:29:54</postTime><diggCount>9</diggCount><formatTime>2023.12.21</formatTime><picList>https://img-blog.csdnimg.cn/direct/dc26b7f1c731494f80c8c3b3badfa95d.jpeg</picList><collectCount>9</collectCount></list><total>72</total></data>
</root>

三、代码实现

1. pom.xml

<dependency><groupId>org.springframework</groupId><artifactId>spring-webflux</artifactId><version>5.2.3.RELEASE</version></dependency><dependency><groupId>io.projectreactor.netty</groupId><artifactId>reactor-netty</artifactId><version>0.9.4.RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.12.1</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.10</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.10.2</version></dependency><dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.4</version></dependency><dependency><groupId>jaxen</groupId><artifactId>jaxen</artifactId><version>2.0.0</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.5.2</version><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version><scope>provided</scope></dependency>

2. 核心代码

package com.fly.xml;import java.io.IOException;
import java.io.StringReader;
import java.nio.charset.StandardCharsets;import org.apache.commons.io.IOUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.client.WebClient;import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;import lombok.extern.slf4j.Slf4j;@Slf4j
public class XmlTest
{static JsonMapper jsonMapper = new JsonMapper();static XmlMapper xmlMapper = new XmlMapper();static WebClient webClient = WebClient.builder().codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(-1)).build(); @Testpublic void testApi()throws IOException, DocumentException{//WebClient同步调用String url = "https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=5&businessType=blog&username=qq_16127313";String jsonText = webClient.get().uri(url).acceptCharset(StandardCharsets.UTF_8).accept(MediaType.APPLICATION_JSON).retrieve().bodyToMono(String.class).block();//json转xmlJsonNode jsonNode = jsonMapper.readTree(jsonText);String xml = xmlMapper.writeValueAsString(jsonNode);// dom4j、XPathDocument doc = new SAXReader().read(new StringReader(xml));doc.selectNodes("//data/list/url").stream().forEach(n -> log.info(n.getStringValue()));doc.selectNodes("//data/list/viewCount").stream().forEach(n -> log.info(n.getStringValue()));}
}

3. 运行结果

在这里插入图片描述

四、源码传送

https://gitee.com/00fly/effict-side/blob/master/springboot-cache/src/test/java/com/fly/test/restful/json/ParseJson.java


大家可以根据需要选择方案,有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AcrelCloud-3000环保用电监管云平台解决方案——安科瑞赵嘉敏

概述 国家全面推进打赢蓝天保卫战&#xff0c;打好碧水保卫战&#xff0c;打胜净土保卫战&#xff0c;加快生态环境保护、建设美丽中国。环保用电监管系统针对企业内的环保设施、设备运行状况进行检测&#xff0c;发挥环保设备的作用&#xff0c;提高监察效率&#xff0c;并为…

洛谷 P1217 [USACO1.5] 回文质数 Prime Palindromes 刷题笔记

P1217 [USACO1.5] 回文质数 Prime Palindromes - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 直接枚举 减枝优化判断 优化1 只有偶数才会是质数 优化2 回文数的判断次数要优于检查素数 先判断是否为回文数再检查是否为质数 if( hw(i)&&isprime(i)) 这里…

Springcloud Gateway网关

简介 SpringCloud Gateway是基于WebFlux框架实现的&#xff0c;而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。 Spring Cloud Gateway的目标提供统一的路由方式且基于 Filter链的方式提供了网关基本的功能&#xff0c;例如:安全&#xff0c;监控/指标&#xf…

lv14 IO模型:阻塞和非阻塞 7

1 五种IO模型------读写外设数据的方式 阻塞: 不能操作就睡觉 非阻塞&#xff1a;不能操作就返回错误(通过轮询即才能实现阻塞的情况 &#xff09; 多路复用&#xff1a;委托中介监控 信号驱动&#xff1a;让内核如果能操作时发信号&#xff0c;在信号处理函数中操作 异步IO&a…

ES6(一部分)未完...

文章目录 ES61.ES6 let声明变量2.ES6 const声明常量3.变量解构赋值3-1解构对象3-2解构数组3-3字符串解构 4.模板字符串5.字符串扩展5-1 include函数5-2 repeat函数&#xff08;重复&#xff09; 6.数值扩展6-1二进制和八进制表示法6-2isFinite 与 isNaN方法6-3islnteger方法6-4…

Vue3+TS+Vite 构建自动导入开发环境

关注⬆️⬆️⬆️⬆️ 专栏后期更新更多前端内容 在一个使用 Vue 3、Vite 和 TypeScript 的项目中,配置 unplugin-auto-import 和 unplugin-vue-components 插件可以极大地提高开发效率,因为它们可以自动导入 Vue 相关的 API 和 Vue 组件,从而减少了手动导入的需要。 文章目…

FPGA UDP协议栈:基于88E1111,支持RGMII、GMII、SGMII三种模式,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案本协议栈的 1G-UDP版本本协议栈的 10G-UDP版本本协议栈的 25G-UDP版本1G 千兆网 TCP-->服务器 方案1G 千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案 3、该UDP协议栈性能4、详细设计方案设…

Hyperledger Fabric 消息协议

Fabric 中大量采用了 gRPC 消息在不同组件之间进行通信交互&#xff0c;主要包括如下几种情况&#xff1a;客户端访问 Peer 节点&#xff0c;客户端和 Peer 节点访问排序节点&#xff0c;链码容器与 Peer 节点交互&#xff0c;以及多个 Peer 节点之间的 Gossip 交互。 消息结构…

Android 架构 - 模块化

参考文章 谷歌官方指南 一、概念 将大型、复杂问题拆解成一个个小的、简单问题&#xff0c;从而可以做到各个击破。模块化简单讲就是把多功能高耦合的代码逻辑拆散成多个功能单一职责明确的模块。模块指 Android 项目中的 module&#xff0c;通常会包含 Gradle 构建脚本、源代…

【Android Studio】创建第一个APP工程及生成APK安装包

&#x1f31f;博主领域&#xff1a;嵌入式领域&人工智能&软件开发 前言&#xff1a;本文详细介绍创建Android Studio第一个APP工程及打包生成APK安装包。 如下两个博客我记录了第一次创建项目时出现的问题&#xff0c;若你也遇见了同样的问题&#xff0c;可参考&#…

QT上位机开发(会员充值软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 所有的控件当中&#xff0c;除了label、edit、radio、combobox和button之外&#xff0c;另外一个用的比较多的控件就是grid&#xff0c;也可称之为…

数学的雨伞下:理解世界的乐趣

这本书没有一个公式&#xff0c;却讲透了数学的本质&#xff01; 《数学的雨伞下&#xff1a;理解世界的乐趣》。一本足以刷新观念的好书&#xff0c;从超市到对数再到相对论&#xff0c;娓娓道来。对于思维空间也给出了一个更容易理解的角度。 作者&#xff1a;米卡埃尔•洛奈…

WindowsServer安装mysql最新版

安装 下载相应mysql安装包&#xff1a; MySQL :: Download MySQL Installer 选择不登陆下载 双击运行下载好的mysql-installer-community-*.*.*.msi 进入类型选择页面&#xff0c;本人需要mysql云服务就选择了server only server only&#xff08;服务器&#xff09;&#x…

day11 有效的括号 删除字符串中的所有相邻重复项 逆波兰表达式求值

题目1&#xff1a;20 有效的括号 题目链接&#xff1a;20 有效的括号 题意 判断字符串是否有效&#xff0c;若有效&#xff1a; 1&#xff09;左括号必须用相应的右括号 2&#xff09;左括号的闭合顺序正确 ({)}顺序不正确&#xff0c;应该是&#xff08;{}&#xff09; …

如何使用GaussDB创建脱敏策略(MASKING POLICY)

目录 一、前言 二、GaussDB中的脱敏策略 1、数据脱敏的定义 2、创建脱敏策略的语法说明 三、在GaussDB中如何创建数据脱敏策略(示例) 1、创建脱敏策略的一般步骤 2、GaussDB数据库中创建脱敏策略的完整示例 1&#xff09;开启安全策略开关&#xff0c;以初识用户omm登录…

Qt/QML编程学习之心得:一个音频播放器的实现(29)

在window下&#xff0c;打开音乐播放器&#xff0c;然后打开一个.mp3文件&#xff0c;就可以实现播放了&#xff0c;那么在Qt/QML中如何实现呢&#xff1f;首先所有的设计都是基于音乐播放器的&#xff0c;嵌入式linux下同样也有音乐播放器&#xff0c;比如mplayer。其调用方法…

Python语法进阶学习--模块和包

在学习python进阶知识中的面向对象之前,还要了解一下当中几个概念:包、模块、类和函数。 一.模块和包 模块和包:用来组织Python代码的。 包 > 含有 __init__.py文件的文件夹模块 > py文件类 > class 【面向对象学习】函数&#xff08;方法&#xff09;> def 以上均…

Unity3D时间类Time和DateTime的用法

系列文章目录 Unity知识点 文章目录 系列文章目录前言一、Time和DataTime的区别1-1、命名空间不同 二、Time和DataTime的使用2-1、Time类2-2、代码解释如下&#xff1a;2-3、DataTime类2-4、代码解释如下&#xff1a; 三、实际应用3-1、Time类测试性能代码如下3-2、运行结果如…

小H靶场笔记:DC-7

DC-7 January 8, 2024 4:11 PM Tags&#xff1a;Drupal 8&#xff1b;Drush Owner&#xff1a;只惠摸鱼 信息收集 使用arp-scan和nmap扫描C段存活主机&#xff0c;探测到靶机ip&#xff1a;192.168.199.137&#xff0c;且开放80、22端口 探测22、80开放端口的服务、版本、操…

Mac电脑系统提速软件CleanmyMac X2024

Mac是现代人日常工作时必不可少的工具&#xff0c;尤其是在居家办公已经屡见不鲜的当下。视频会议、文档传送、视频剪辑等等。它在工作中扮演的角色越来越重要&#xff0c;所以也导致了它的流畅程度可以在很大程度上影响人们一整天的工作效率和心情。 CleanMyMac X全新版下载如…