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

java解析json复杂数据补充

文章目录

  • 一、概述
  • 二、编码实现
    • 1. 新建data.json数据
    • 2. 编写单元测试
    • 3. 运行结果
  • 三,源码放送

一、概述

在java解析json复杂数据的两种思路 一文中,我们提到 将JSON字符串转化为JavaBean的方案。

注意到需保证实体属性与json key全部严格对应,其实jackson也支持解析时忽略无法识别字段

二、编码实现

由于csdn加强了接口调用的防爬控制,无法直接获取接口数据,现采取读取数据文件的方式。

1. 新建data.json数据

{"code": 200,"message": "success","traceId": "cda06828-d9ab-4eb9-b743-11f284a4e4b4","data": {"list": [{"articleId": 139042649,"title": "CSDN博客自动阅读器-服务端推送技术SSE之简单应用","description": "接上篇springboot实现SSE之牛刀小试我们已经了解了SSE技术的优缺点以及来龙去脉,下面我们以SSE技术来实现一个简单的博客文章阅读器。","url": "https://blog.csdn.net/qq_16127313/article/details/139042649","type": 1,"top": false,"forcePlan": false,"viewCount": 274,"commentCount": 0,"editUrl": "https://editor.csdn.net/md?articleId=139042649","postTime": "2024-05-19 15:04:13","diggCount": 3,"formatTime": "19 小时前","picList": ["https://img-blog.csdnimg.cn/direct/bf448120ffaf4d00bc93b2305791b9a4.jpeg"],"collectCount": 3},{"articleId": 138968138,"title": "springcloud微服务牛刀小试开篇:示例概述","description": "尽管Spring Cloud带有“Cloud”的字样,但它并不是云计算解决方案,而是在Spring Boot基础上构建的,用于快速构建分布式系统的通用模式的工具集。使用Spring Cloud开发的应用程序非常适合在Docker或者PaaS(例如Cloud Foundry)上部署,所以又叫做云原生应用(Cloud Native Application)。下面以一个简单示例来介绍如何搭建一套微服务系统。","url": "https://blog.csdn.net/qq_16127313/article/details/138968138","type": 1,"top": false,"forcePlan": false,"viewCount": 610,"commentCount": 0,"editUrl": "https://editor.csdn.net/md?articleId=138968138","postTime": "2024-05-16 17:59:47","diggCount": 9,"formatTime": "2024.05.16","picList": ["https://img-blog.csdnimg.cn/direct/08cfa2f4cb534cf199c79002b455efed.png"],"collectCount": 25},{"articleId": 138337724,"title": "基于缓存注解的时间戳令牌防重复提交设计","description": "API接口由于需要供第三方服务调用,所以必须暴露到外网,并提供了具体请求地址和请求参数。为了防止重放攻击必须要保证请求仅一次有效比较成熟的做法有批量颁发时间戳令牌,每次请求消费一个令牌。/*** @version [版本号, 2019年12月18日]* @see [相关类/方法]* @since [产品/模块版本]","url": "https://blog.csdn.net/qq_16127313/article/details/138337724","type": 1,"top": false,"forcePlan": false,"viewCount": 2204,"commentCount": 2,"editUrl": "https://editor.csdn.net/md?articleId=138337724","postTime": "2024-04-30 12:03:24","diggCount": 17,"formatTime": "2024.04.30","picList": ["https://img-blog.csdnimg.cn/direct/fd4f0d49b87943deb9d89a08baefab93.png"],"collectCount": 13},{"articleId": 138240421,"title": "基于自定义注解、切面实现的WebApi接口","description": "某自研系统,已有完善的业务接口,现在需要开放一部分web接口做对外服务,需要加入鉴权、防重放、限流、防篡改等功能,请给出一个合理的设计方案。OpenApi/*** 开放API注解/*** 检查项/*** 开放API注解/*** 检查项/*** 开放API注解/*** 检查项Documented;/*** 开放API注解/*** 检查项/*** 开放API注解/*** 检查项/**","url": "https://blog.csdn.net/qq_16127313/article/details/138240421","type": 1,"top": false,"forcePlan": false,"viewCount": 1746,"commentCount": 0,"editUrl": "https://editor.csdn.net/md?articleId=138240421","postTime": "2024-04-27 11:49:08","diggCount": 10,"formatTime": "2024.04.27","picList": ["https://img-blog.csdnimg.cn/direct/d942fb650ddd4c779adefe18a19bbb05.png"],"collectCount": 22},{"articleId": 138239036,"title": "【邻里噪音攻略】","description": "#邻里噪音攻略","url": "https://blog.csdn.net/qq_16127313/article/details/138239036","type": 2,"top": false,"forcePlan": false,"viewCount": 1092,"commentCount": 0,"editUrl": "https://editor.csdn.net/md?articleId=138239036","postTime": "2024-04-27 08:59:57","diggCount": 0,"formatTime": "2024.04.27","picList": ["https://img-blog.csdnimg.cn/direct/657e47b114e04df1871aebecb026ba80.png"],"collectCount": 0}],"total": 102}
}

2. 编写单元测试


import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;import lombok.Data;
import lombok.extern.slf4j.Slf4j;@Slf4j
public class ParseJsonIgnoreError
{/*** 解析为实体* * @throws IOException*/@Testpublic void testToEntity()throws IOException{ObjectMapper objectMapper = new ObjectMapper();objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 忽略无法识别字段BlogData blogData = objectMapper.readValue(getJsonData(), BlogData.class);log.info("blogData: {} ", blogData);}/*** 获取jsonData* * @return* @throws IOException*/private String getJsonData()throws IOException{Resource resource = new ClassPathResource("data.json");try (InputStream input = resource.getInputStream()){return IOUtils.toString(input, StandardCharsets.UTF_8);}}
}@Data
class BlogData
{private Record data;
}@Data
class Record
{private List<Article> list;
}@Data
class Article
{String title;String url;Long viewCount;
}

3. 运行结果

2024-05-20 17:56:48.722 [main] INFO  com.fly.json.ParseJsonIngoreError - blogData: BlogData(data=Record(list=[Article(title=CSDN博客自动阅读器-服务端推送技术SSE之简单应用, url=https://blog.csdn.net/qq_16127313/article/details/139042649, viewCount=274), Article(title=springcloud微服务牛刀小试开篇:示例概述, url=https://blog.csdn.net/qq_16127313/article/details/138968138, viewCount=610), Article(title=基于缓存注解的时间戳令牌防重复提交设计, url=https://blog.csdn.net/qq_16127313/article/details/138337724, viewCount=2204), Article(title=基于自定义注解、切面实现的WebApi接口, url=https://blog.csdn.net/qq_16127313/article/details/138240421, viewCount=1746), Article(title=【邻里噪音攻略】, url=https://blog.csdn.net/qq_16127313/article/details/138239036, viewCount=1092)])) 

三,源码放送

https://gitcode.com/00fly/csdn-reader/blob/main/src/test/java/com/fly/json/ParseJsonIgnoreError.java

git clone https://gitcode.com/00fly/csdn-reader.git

有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CSS伪类实现input聚焦时,上层div样式改变
  • 如何跨过robots协议的限制爬取内容?
  • 设计模式9——适配器模式
  • Prometheus+Grafana监控服务器、mysql数据库并配置报警规则推送邮箱
  • WORD、PPT技巧
  • Python文件和数据格式化-课堂练习[python123题库]
  • dmanywhere的docker制作
  • 【博客714】golang使用mmap来优化gc
  • 从零开始学Vue3--环境搭建
  • AUTOMATIC1111/stable-diffusion-webui/stable-diffusion-webui-v1.9.3
  • 【FPGA】Verilog:解码器 | 编码器 | 多路复用器(Mux, Multiplexer)
  • 基于HTML5和CSS3搭建一个Web网页(二)
  • 本地部署Whisper实现语言转文字
  • 2024年【N1叉车司机】免费试题及N1叉车司机模拟试题
  • Spring服务启动后就执行某个方法
  • 【Leetcode】101. 对称二叉树
  • JavaScript-如何实现克隆(clone)函数
  • 【技术性】Search知识
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • HTTP请求重发
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java面向对象及其三大特征
  • JAVA之继承和多态
  • JS+CSS实现数字滚动
  • orm2 中文文档 3.1 模型属性
  • python大佬养成计划----difflib模块
  • QQ浏览器x5内核的兼容性问题
  • Sublime text 3 3103 注册码
  • vue脚手架vue-cli
  • 排序(1):冒泡排序
  • 软件开发学习的5大技巧,你知道吗?
  • -- 数据结构 顺序表 --Java
  • raise 与 raise ... from 的区别
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ​如何在iOS手机上查看应用日志
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • $$$$GB2312-80区位编码表$$$$
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)Hilt的基本概念和使用
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)我也是一只IT小小鸟
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net Core 中间件与过滤器
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET Project Open Day(2011.11.13)
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • @Autowired 与@Resource的区别
  • @Builder注释导致@RequestBody的前端json反序列化失败,HTTP400
  • @RequestMapping-占位符映射