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(); 
    
   
    @Test
    public 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转xml
        JsonNode jsonNode = jsonMapper.readTree(jsonText);
        String xml = xmlMapper.writeValueAsString(jsonNode);
        
        // dom4j、XPath
        Document 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-

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据库原理】(11)SQL数据查询功能

基本格式 SELECT [ALL|DISTINCT]<目标列表达式>[,目标列表达式>]... FROM <表名或视图名>[,<表名或视图名>] ... [ WHERE <条件表达式>] [GROUP BY<列名 1>[HAVING <条件表达式>]] [ORDER BY <列名 2>[ASC DESC]];SELECT: 指定要…

springboot医院信管系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

FastDFS之快速入门、上手

知识概念 分布式文件系统 通过计算机网络将各个物理存储资源连接起来。通过分布式文件系统&#xff0c;将网络上任意资源以逻辑上的树形结构展现&#xff0c;让用户访问网络上的共享文件更见简便。 文件存储的变迁&#xff1a; 直连存储&#xff1a;直接连接与存储&#xf…

Oracle regexp_substr

select regexp_substr(123|456|789, [^|], 1, 2) from dual;

暴雨信息发布算力网络应用平台打造零感知算网服务新模式

为进一步优化算力网络应用服务能力和降低算力网络使用难度&#xff0c;暴雨信息突破基于算力网络的实例跨域协同与迁移、基于测试评估的应用度量和解构等技术&#xff0c;研发并推出算力网络应用平台。该系统通过提供一种即开即用、按需付费的零感知算网应用服务&#xff0c;使…

Python基础语法(上)——基本语法、顺序语句、判断语句、循环语句(有C++基础快速掌握Python语言)

文章目录 0.python小技巧与易错点1.python 与 c 语法有哪些区别2.Python基本语法2.1python的变量类型2.2python中的运算符2.3python中的表达式2.4python中的输入输出 3.python判断语句3.1基本用法&#xff1a;3.2关于else if 的用法3.3关于pass语句3.4python变量的作用域3.5pyt…

THB6128两相四线步进电机PWM驱动控制

THB6128两相四线步进电机驱动控制模块&#xff0c;可以驱动57及以下两相四线步进电机。该模块有以下优点&#xff1a; 芯片使用双全桥MOSFET驱动&#xff0c;低导通电阻Ron 0.55Ω最高耐压36V&#xff0c;峰值电流2.2A&#xff0c;持续电流2A&#xff0c;电流设定通过拨码开关…

大模型LLM在 Text2SQL 上的应用实践

一、前言 目前&#xff0c;大模型的一个热门应用方向Text2SQL&#xff0c;它可以帮助用户快速生成想要查询的SQL语句&#xff0c;再结合可视化技术可以降低使用数据的门槛&#xff0c;更便捷的支持决策。本文将从以下四个方面介绍LLM在Text2SQL应用上的基础实践。 Text2SQL概…

常用注解/代码解释(仅个人使用)

目录 第一章、代码解释①trim() 方法以及(Arrays.asList(str.split(reg)));②查询字典项②构建后端镜像shell命令解释 第二章、注解解释①PropertySource注解与Configurationproperties注解的区别 第三章、小知识①Linux系统中使用$符号表示变量 友情提醒: 先看文章目录&#…

Android学习(四):常用布局

Android学习&#xff08;四&#xff09;&#xff1a;常用布局 五种常用布局 线性布局&#xff1a;以水平或垂直方向排列相对布局&#xff1a;通过相对定位排列帧布局&#xff1a;开辟空白区域&#xff0c;帧里的控件(层)叠加表格布局&#xff1a;表格形式排列绝对布局&#x…

C语言之三子棋小游戏的应用

文章目录 前言一、前期准备模块化设计 二、框架搭建三、游戏实现打印棋盘代码优化玩家下棋电脑下棋判断输赢 四、结束 前言 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#…

2024--Django平台开发-Django知识点(六)

day06 Django知识点 今日概要&#xff1a; Form和ModelForm组件【使用】【源码】缓存【使用】ORM【使用】其他&#xff1a;ContentTypes、Admin、权限、分页、信号等 1.Form和ModelForm组件 背景&#xff1a;某个公司后台管理项目。 垃圾 def register(request):"&quo…

PowerDesigner简介以及简单使用

软件简介&#xff1a; PowerDesigner是Sybase公司开发的数据库设计工具&#xff0c;开发人员能搞利用PowerDesigner开发数据流程图、各数据模型如物理数据模型&#xff0c;可以分别从概念数据模型(Conceptual Data Model)和物理数据模型(Physical Data Model)两个层次对数据库…

互联网加竞赛 基于大数据的社交平台数据爬虫舆情分析可视化系统

文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷5

某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenStack搭建企业内部私有云平台&#xff0c;开源Kubernetes搭建云原生服务平台&#xff0c;选…

[Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例

在群組中看到上述問題&#xff0c;研判應是一份隨月份變動的產品報價表單&#xff0c;空白欄可能表示該月份價格與上個月份一致。這個問題是需要取得最近一次單價和倒數第二次單價&#xff0c;常用且實務的excel案例值得紀錄。 最近一次單價: INDEX($B2:$G2,1,LARGE(IF(ISBLAN…

鸿蒙原生应用再添新丁!京东入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;京东入局鸿蒙 来自 HarmonyOS 微博1月10日消息&#xff0c;#京东启动鸿蒙原生应用开发#&#xff01;优惠信息、派送进度都可以随时随地便捷查询。双方将携手为消费者带来全场景“多快好省”购物体验&#xff0c;更智能&#xff0c;更贴心&…

【Python机器学习】SVM——线性模型与非线性特征

SVM&#xff08;核支持向量机&#xff09;是一种监督学习模型&#xff0c;是可以推广到更复杂模型的扩展&#xff0c;这些模型无法被输入空间的超平面定义。 线模型在低维空间中可能非常受限&#xff0c;因为线和平面的灵活性有限&#xff0c;但是有一种方式可以让线性模型更加…

three.js实现扩散波效果

three.js实现扩散波效果 图例 步骤 创建一个圆柱&#xff0c;不要顶与底面材质允许透明&#xff0c;双面显示动态修改缩放与透明度 代码 <template><div class"app"><div ref"canvesRef" class"canvas-wrap"></div>…

jmeter+ant+Jenkins集成

一、 环境准备 1、Jenkins下载&#xff1a;https://jenkins.io/zh/download/ 2、 Jenkins安装&#xff1a;解压下载的压缩包&#xff0c;直接点击msi文件安装即可 4、 Jenkins登录用户设置&#xff1a;装&#xff1a; 浏览器地址栏中输入&#xff1a;http://localhost:8080/…