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;
}
相关推荐
.try-3 分钟前
cssTab卡片式
java·前端·javascript
ulias21221 分钟前
多态理论与实践
java·开发语言·前端·c++·算法
幽络源小助理33 分钟前
SpringBoot+Vue攀枝花水果在线销售系统源码 | Java项目免费下载 – 幽络源
java·vue.js·spring boot
inBuilder低代码平台33 分钟前
浅谈安卓Webview从初级到高级应用
android·java·webview
豌豆学姐37 分钟前
Sora2 短剧视频创作中如何保持人物一致性?角色创建接口教程
android·java·aigc·php·音视频·uniapp
SadSunset42 分钟前
关于springAOP的总结
java·后端·spring
计算机学姐1 小时前
基于SpringBoot的演出购票系统【2026最新】
java·vue.js·spring boot·后端·spring·tomcat·intellij-idea
清晓粼溪1 小时前
RestTemplate
java·spring cloud
木风小助理1 小时前
C# 高效编程:Any () 与 Count () 正确选择
java·solr·lucene
Java水解1 小时前
Spring Boot Starter自定义开发 构建企业级组件库
spring boot·后端