Jaskson的简单使用

简介

对于 对象--json 数据的序列化和反序列有很多的工具可以选择,fastjson和jaskson等,fastjosn有时候麻烦,不想再导入依赖文件,这时候我们可以使用springboot默认的json工具--Jaskson

使用

主要会用

objectMapper.writeValueAsString(XX) : 对象-->json

objectMapper.reader().readValue(json, XX.class) :json-->对象

序列化时候需要忽略的字段 :注解的使用@JsonIgnore

因为Jaskson已经被springboot管理了,所有在使用的时候直接依赖注入就可以了。

java 复制代码
   @Autowired
    ObjectMapper objectMapper; // 直接依赖注入

测试类 Stu

java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Stu {
    private  String name;
    private Integer age;
}

测试:

json--类对象的转化

java 复制代码
   @Autowired
    ObjectMapper objectMapper; // 直接依赖注入
    @Test
    void TestJson() throws IOException {
        Stu stu=new Stu("张三",24); // 测试对象
        System.out.println("原始数据:"+stu);
        String json = objectMapper.writeValueAsString(stu); // 序列化
        System.out.println("Stu-->json:"+json);
        Stu stu1 = objectMapper.reader().readValue(json, Stu.class); // 反序列化
        System.out.println("json->Stu:"+stu1);

    }

结果:

html 复制代码
原始数据:Stu(name=张三, age=24)
Stu-->json:{"name":"张三","age":24}
json->Stu:Stu(name=张三, age=24)

json--map 之间的转化

java 复制代码
    @Test
    void TestJson2() throws IOException {
        Map<Integer,Stu> map=new HashMap<>();
        Stu stu=new Stu("张三",24);
        Stu stu2=new Stu("李四",24);
        Stu stu3=new Stu("王五",24);
        map.put(1,stu);
        map.put(2,stu2);
        map.put(3,stu3);
        System.out.println("原始数据:"+map);
        String json = objectMapper.writeValueAsString(map); //序列化
        System.out.println("json数据:"+json);
        Map<Integer,Stu> stu1 = objectMapper.reader().readValue(json, Map.class); // 反序列化
        System.out.println("json->Map:"+stu1);
    }

结果:

html 复制代码
原始数据:{1=Stu(name=张三, age=24), 2=Stu(name=李四, age=24), 3=Stu(name=王五, age=24)}
json数据:{"1":{"name":"张三","age":24},"2":{"name":"李四","age":24},"3":{"name":"王五","age":24}}
json->Map:{1={name=张三, age=24}, 2={name=李四, age=24}, 3={name=王五, age=24}}

关于 @JsonIgnore 注解

有一个坑,在 Stu-->json 的时候以及 json-->Stu 的时候会忽略@JsonIgnore标记的属性。

在Map<object,Stu>-->json时候也忽略了该注解标记的属性,但json-->Map<object,Stu> 时候却没有忽略,这一点需要注意。

java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Stu {
    private  String name;
    @JsonIgnore // 不进行序列化操作, 对于 json->类对象时候反序列也忽略,json->Map<Object,Stu> 反序列化却没有被忽略
    private Integer age;
}
相关推荐
嘻哈baby8 小时前
Go 函数中的参数为什么不支持默认值?
java·开发语言·jvm
慧都小项8 小时前
MyEclipse 2026:当 Agent、MCP 与 Java 26 进入 Eclipse 工作流
java·eclipse·springboot·copilot·myeclipse
摇滚侠9 小时前
《SpringBoot 3:入门与应用实战》第 14 章 打包与部署 Spring Boot 应用打包 阅读笔记 41
spring boot·笔记·后端
大梦想家a9 小时前
新能源汽车共享充电桩收费管理系统的设计与实现(SpringBoot+MyBatis-Plus+Vue,前后台分离完整源码)
spring boot·汽车·mybatis
CoderYanger9 小时前
前端基础——JavaScript(基础语法)(下篇)
java·开发语言·前端·javascript·程序人生·面试·职场和发展
京师20万禁军教头9 小时前
39面向对象(高级)-设计模式
java·开发语言·设计模式
白山编程大哥10 小时前
Java 迭代器接口详解:从 Iterator 到 ListIterator 的完整指南
java·开发语言·windows
热心网友俣先生10 小时前
2026国赛C题:五年命题规律与预测
java·c语言·前端·数学建模
见叶之秋10 小时前
【C++】String类的使用(含模拟实现)
java·开发语言·c++
竹叶青_七弦10 小时前
从复制粘贴到Harness:Java后端AI编程的工程化之路
java