android jackson 解析json字符串,一文搞定Jackson解析JSON数据

Json解析-Jackson使用教程

日常求赞,感谢老板。

一、JSON解析

我这里指的解析是:JSON和JavaObject之间的序列化和反序列化。

如果你的项目进行了前后端分离,那你一定使用过JSON进行数据交互,那在后端就一定会涉及到对Json数据的解析,虽然使用SpringMvc加上@requestBody都已经帮我们解析好并映射到bean里了,但是他底层也是通过这些JSON解析类库来完成的(SpringMVC默认使用的就是Jackson)。在我们后端直接调其他服务的接口时,很多也会返回JSON数据也需要我们自己使用这些类库来进行解析。

二、常见的JSON解析类库

fastjson:阿里出品的一个JSON解析类库,很快,提供了很多静态方法使用方便,但是底层实现不是很好,解析过程中使用String的substring,性能很好,但是可能会导致内存泄漏。

Gson:谷歌出品的JSOn解析类库,但是性能相较于其他连个稍微差点。

Jackson:相对比较推荐的一种JSON解析类库,性能好稳定。Jackson的源代码托管在:https://github.com/FasterXML/jackson。

三、Jackson使用

1、Maven依赖引入

com.fasterxml.jackson.core

jackson-databind

${jackson-version}

com.fasterxml.jackson.core

jackson-core

${jackson-version}

com.fasterxml.jackson.core

jackson-annotations

${jackson-version}

2、基本使用

反序列化

使用ObjectMapper,将json字符串转成对象:

String str = "{\"id\":1,\"name\":\"haha\",\"elements\":[{\"age\":1,\"elName\":\"zll\"},{\"age\":2,\"elName\":\"zll1\"}]}";

ObjectMapper objectMapper = new ObjectMapper();

TestBean testBean = objectMapper.readValue(str, TestBean.class);

System.out.println(testBean.toString());

运行结果:

TestBean(id=1, name=haha, elements=[Element(age=1, elName=zll), Element(age=2, elName=zll1)])

使用ObjectMapper,读取json某些字段值

String str = "{\"id\":1,\"name\":\"haha\",\"elements\":[{\"age\":1,\"elName\":\"zll\"},{\"age\":2,\"elName\":\"zll1\"}]}";

ObjectMapper objectMapper = new ObjectMapper();

JsonNode jsonNode = objectMapper.readTree(str);

//获取name字段值

JsonNode name = jsonNode.get("name");

String s = name.asText();

System.out.println(s);

//获取elements字段下数组第二个对象的age

JsonNode elements = jsonNode.get("elements");

JsonNode object2 = elements.get(1);//从0开始哦

JsonNode age = object2.get("age");

int i = age.asInt();

System.out.println(i);

运行结果:

haha

2

序列化

ObjectMapper(将JavaObject转化成JSON)

Element element = new Element();

element.setAge(1);

element.setElName("zll");

ObjectMapper objectMapper = new ObjectMapper();

String elementStr = objectMapper.writeValueAsString(element);

System.out.println(elementStr);

输出结果如下:

{"age":1,"elName":"zll"}

其他常用序列化方法:

writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中

writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。

teValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组

writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。

JsonGenerator(json生成器):

可以根据自己的需要创建相应结构的json

ByteArrayOutputStream bout = new ByteArrayOutputStream();

//JsonFactory jsonFactory = new JsonFactory();

//创建jsonfactory 2种方法

ObjectMapper objectMapper = new ObjectMapper();

JsonFactory jsonFactory = objectMapper.getFactory();

JsonGenerator generator = jsonFactory.createGenerator(bout);

//创建自己需要的json

//创建对象获取数组要写开始和结束

generator.writeStartObject();

//创建一个字段 第一个参数key 第二个参数value

generator.writeStringField("name","value");

generator.writeNumberField("numberName",1);

//或者直接创建object

generator.writeObjectField("ObjectName","ObjectValue");

//创建数组

generator.writeArrayFieldStart("arrayName");

//里面可以是对象、数组、字符串、数字

generator.writeString("element1");

generator.writeNumber(1);

generator.writeNumber(1);

generator.writeEndArray();

generator.writeEndObject();

generator.flush();

generator.close();

String s = bout.toString();

System.out.println(s);

执行结果:

{"name":"value","numberName":1,"ObjectName":"ObjectValue","arrayName":["element1",1,1]}

2、ObjectMapper的常用设置

ObjectMapper objectMapper = new ObjectMapper();

//序列化的时候序列对象的所有属性

objectMapper.setSerializationInclusion(Include.ALWAYS);

//反序列化的时候如果多了其他属性,不抛出异常

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

//如果是空对象的时候,不抛异常

objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

//属性为null的转换

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

//取消时间的转化格式,默认是时间戳,可以取消,同时需要设置要表现的时间格式

objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

3、常用注解

@JsonIgnoreProperties(ignoreUnknown = true):

将这个注解加载类上,不存在的字段将被忽略。

@JsonIgnoreProperties({ “password”, “secretKey” }):

指定忽略字段

@JsonIgnore:

标在注解上,将忽略此字段

@JsonFormat(timezone = “GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”):

标在时间自端上序列化是使用制定规则格式化(默认转化成时间戳)

@JsonInclude(参数)

JsonInclude.Include.NON_EMPTY:属性为空或者null都不参与序列化

JsonInclude.Include.NON_NULL:属性为null不参与序列化

@JsonProperty(“firstName”)

标在字段上,指定序列化后的字段名

@JsonDeserialize(using= T extends JsonDeserializer.class)和@JsonSerialize(using= T extends JsonSerializer.class)

自定义某些类型字段的序列化与反序列化规则

四、最后

总结内容

更多资源:其实是白羊

欢迎star

日常求赞

如果你认为本文对你有帮助,还请「在看/转发/赞/star」,多谢

如果你还发现了更好或不同的想法,还请在留言区不吝赐教,一起探讨交流修改,万分感谢

三种高效Android JSON解析技术,让你的数据传输畅通无阻! 这三种解析JSON的方案各有特点,我们可以根据具体需求和项目复杂程度权衡选择。而在我看来,Google Gson则是大多数应用的不二之选,它Strike了简洁和性能之间最好的平衡。讨论到这里,你是否也有自己的看法和经验?欢迎在评论区继续交流探讨,分享你在JSON解析这条路上的点点心得。 阅读详情

相关推荐

Android 中 解析 JSON 字符串的几种方式

在Kotlin中解析JSON字符串,可以使用多种方式,包括原生的org.json包,以及流行的第三方库如Gson、Jackson和Moshi。

casual_clover的博客 554

Android-json解析(二):Jackson的使用

Jackson的使用:1、导入依赖compile 'com.fasterxml.jackson.core:jackson-databind:2.9.0.pr3' compile 'com.fasterxml.jackson.core:jackson-core:2.9.0.pr3' compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.

火星男孩的分享空间 7878

【我的Android进阶之旅】解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1、问题描述首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", fro

字节卷动 9990

Android Jackson 概述

原文地址 本文内容 JSON 的三种方式 示例 完全数据绑定(POJO)示例 “Raw”数据绑定示例 用泛型数据绑定 树模型(Tree Model)示例 流(Streaming)API 示例 流(Streaming)API 示例 2:数组 演示代码 参考资料 术语 最近写 Android APP,需要序列化和反序列化。但是遇到一些问题,于是就顺便研究了一下 Jackso...

weixin_34120274的博客 316

Android JackSon解析JSON

比GOSN快10倍 手打Demo jackson-all-1.9.11 使用方便

Windows 11下JDK 21与JMeter 5.6.3环境配置全攻略

环境变量是操作系统管理软件路径与执行权限的核心机制,它通过预设的键值对,指引系统在调用命令时定位可执行文件。理解其工作原理,是解决软件安装后“命令未找到”等问题的关键。对于Java生态而言,正确配置JAVA_HOME和Path变量,不仅能让java、javac等基础命令全局可用,更是Maven、Gradle乃至JMeter等众多工具链顺畅运行的基石。JMeter作为一款基于Java开发的经典性能测试与接口测试工具,其稳定运行高度依赖健全的Java环境。本文聚焦于在Windows 11系统上,为JDK 21与

weixin_30940783的博客 451

【Android开发经验】比Gson解析速度快10倍!——Json解析神器Jackson使用介绍

转载请注明出处:http://blog.youkuaiyun.com/zhaokaiqiang1992    因为在之前的项目中,xml和json数据格式都用过,所以深深的了解在java语言的编程中,使用json数据格式是多么的简单快速和高效!因此建议大家是定数据格式的时候,尽量采用json格式。    在开始介绍jsckson之前,先简单的给大家介绍一下json格式。

赵凯强 1万+

新手避坑指南:从GEO数据库下载单细胞测序数据的5个关键步骤(附实操截图)

本文为单细胞测序数据下载新手提供5个关键避坑步骤,涵盖数据搜索准备、样本量评估、文件选择决策、元数据诊断及高效下载技术。通过实操截图和代码示例,帮助研究者快速锁定GEO数据库中的优质单细胞测序数据,避免常见错误。

weixin_30296405的博客 672

Android网络数据解析之Jackson

Android网络数据解析之Jackson

LKing的博客 631

Debian下Rust环境极速安装指南:国内镜像+避坑配置(附清华/中科大源对比)

本文详细介绍了在Debian系统上快速安装和配置Rust开发环境的完整指南。针对国内网络环境,重点对比评测了清华大学、中国科学技术大学等主流镜像源,提供了详细的安装配置步骤、Cargo优化技巧以及常见问题排查方案,帮助开发者显著提升依赖下载和编译效率。

s8t9u0v1w的博客 1162

浅谈MOS管的发热原因和解决办法

解读一下开关管发热原因,解决方案和开关损耗测试。

qq_45508321的博客 1万+

Android中Json数据解析(二)--使用Gson、Jackson和FastJson解析Json数据

转载请注明出处: 前言        上一篇文章我们初步学习了一下Json的特点和如何使用Json技术来解析Json数据,今天我们将来了解另外几种比较常用的Json解析技术,分别是Gson解析、Jackson解析和FastJson解析,下面我们来一一学习和分析。 Android中Gson数据解析实例        Gson(又称 Google Gson),是Google公司2008年5月公

叶功恒的博客专栏 6258

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

weixin_55249340的博客 3万+

安卓开发工程师-数据解析(JSON、XML)

在解析 JSON 或 XML 数据时,可能会出现各种异常,如格式错误、数据缺失、类型不匹配等。为了保证程序的健壮性,需要对这些异常进行合理的处理。在解析 JSON 或 XML 数据时,可以将解析后的数据缓存起来,以便下次使用时可以直接从缓存中获取,而无需重新解析。在 Android 中,可以使用 DOM(Document Object Model)解析器来解析 XML 数据。动态解析是指在不知道 JSON 或 XML 数据的具体结构的情况下,能够灵活地解析和处理数据。包来解析 JSON 数据。

qq_62784677的博客 1049

TC8:IPv4_HEADER_01-04

IPv4_HEADER_01: Ensure that the DUT generates an IPv4 Packet with a Total Length greater than or equal to 20 目的 确保DUT生成的IPv4报文的IP头部中的Total Length字段值大于等于20 IPv4协议头部中的Total Length字段表示整个IP数据包的长度,包括IP Header和payload之和,IP首部的长度最少就有20个字节,所以Total Length值肯定大于等于20

jasonj333 3966

2026 最新安全 Skill 合集(CTF / 审计 / 渗透 / 红队)威胁建模一网打尽

2026年安全领域进入"Skill化"时代,各类安全能力被结构化封装为可复用的AI Skill。本文介绍了7个核心安全Skill项目:渗透测试全流程的AgentSkillsHub、CTF解题技能库ctfskills、多语言代码审计工具codeaudit、PHP专项审计系统、Java自动化审计流水线、威胁建模工具threatmodeling以及覆盖30+领域的Anthropic-Cybersecurity-Skills。这些项目将传统安全经验转化为标准化、可验证、可自动执行的模块化能力,支

Chengbei11的博客 1884

Android Jackson、Gson、FastJson解析框架对比

目前Android在使用的Json解析框架主要有Jackson、Gson、FastJson、org.json; 因为Android Studio自带的org.json解析 XML 文件时会将整个 XML 文件的内容解析成树型结构存放在内存中并创建新对象,比较消耗时间和内存,解析速度和效率慢,解析方式和性能完败Gson等开源框架,导致org.json慢慢的也在被淘汰,Andorid开发中还在使用or

JackWaiting 8465

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android JSON解析库终极评测:Gson vs Moshi vs Jackson

在Android开发中,JSON解析是每个开发者都必须面对的核心任务之一。选择合适的JSON解析库不仅能提高开发效率,还能显著影响应用的性能表现。本文将深入评测Android生态中最受欢迎的三大JSON解析库:Gson、Moshi和Jackson,帮助您做出最佳选择。 ## 📊 三大JSON解析库概览 ### Gson - Google官方推荐 Gson是Google开发的Java对象序列化

gitblog_00358的博客 965

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android-JSON解析(Gson、org.json、Jackson、FastJson)

谨以文章记录学习历程,如有错误还请指明。 JSON简介 定义: 一种 轻量级的文本数据 交换格式 作用: 数据标记、存储 & 传输 简记用法: {} 表示对象;[] 表示数组; “” 表示属性或值; :冒号表示后者是前者的值,这个值可以是对象、数组、字符串、数字等 特点: 轻量级 良好的可读性 & 快读编写 独立于平台 解析方式 类似XML解析,分两...

whdAlive 's blog 1311

JSON 使用讲解

在开发有关接口的时候,我们就需要设计接口返回的数据格式,常用的数据格式有xml、json等。那么今天我们就来看看json的使用。 一.JSON 描述。 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#...

程序员七哥 3万+

JSON 解析

JSON 使用讲解 这篇文章讲解了,JSON的介绍以及使用GSON解析。今天,我们就在Android项目中使用两种方式解析JSON数据。如果你对JSON,还不熟悉,那么请看JSON 使用讲解。 一.搭建服务以及制造JSON数据。 1.服务器选择的Tomcat,下载链接。下载安装成功后,服务启动后,在浏览器中输入'http://localhost:8080/',看到如下截图,那就说明启...

程序员七哥 6939

android:json解析的两个工具:Gson和Jackson的使用小例子

1.简介json是android与服务器通信过程中常用的数据格式,例如,如下是一个json格式的字符串:{"address":"Nanjing","name":"NUPT","students":[{"name":"stu1","id":"10000","age":20},{"name":"stu1","id":"10001","age":21},{"name":"stu1","id":"1000

郑海波(莫川)的优快云博客 4410

在Android开发中解析JSON:从基础到高级技巧

在Android开发中,解析JSON是一个常见的需求。通过使用`org.json`库、`Gson`库、`Moshi`库或`Jackson`库,开发者可以轻松地解析和操作JSON数据。对于复杂的数据结构,可以通过嵌套解析、动态字段处理和类型安全的解析来优化性能。希望本文能帮助你在Android开发中更高效地处理JSON数据。

Myqijiahai的博客 1305

Android-json解析(三):原生JSONObject+JSONArray的解析、遍历及生成等

一、JSONObject和JSONArray的数据表示形式JSONObject的数据是用 { } 来表示的,例如: { "id" : "123",

火星男孩的分享空间 3万+
上一篇: sht-11c语言程序,温湿度传感器SHT11数据手册(中文)版.pdf
下一篇: android 仿qq 功能,Android 仿QQ界面的实现
weixin_39708708
博客等级 码龄9年 21粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值