当前位置: 首页> 教育> 幼教 > word页面设计模板_辽宁建设工程信息网企业人员调动_企业宣传网站_seo职位招聘

word页面设计模板_辽宁建设工程信息网企业人员调动_企业宣传网站_seo职位招聘

时间:2025/8/25 16:21:29来源:https://blog.csdn.net/2301_78320637/article/details/142643818 浏览次数:0次
word页面设计模板_辽宁建设工程信息网企业人员调动_企业宣传网站_seo职位招聘

文章目录

  • 概念解释
    • 1.Jaskson
      • a.JSON
        • JSON 的基本特点
        • JSON 的基本结构
        • JSON 示例
      • b.ObjectMapper类
    • 2.序列化与反序列化
      • a.序列化
        • 对象序列化
        • 集合序列化
          • List
          • Set
          • Map
      • b.反序列化
        • 反序列化单个对象
        • 反序列化集合对象

概念解释

1.Jaskson

Jackson 是一个用于处理 JSON 数据的 Java 库,所以,在了解Jackson之前,我们可以先来了解JSON

a.JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。JSON 是基于文本的格式,通常用于在客户端和服务器之间交换数据

JSON 的基本特点

轻量级:JSON 格式简单,数据量小,适合网络传输。
易于阅读: JSON 的结构清晰,易于理解,便于调试。
语言无关: 虽然 JSON 源于 JavaScript,但它被广泛支持于多种编程语言(如 PythonJavaC# 等)。
数据结构: JSON 支持基本的数据类型,如字符串、数字、布尔值、数组和对象。

JSON 的基本结构

JSON 数据由两种结构组成:

  • 对象(Object:由大括号 {} 包围,包含一组键值对。键(key)是字符串,值(value)可以是任意有效的 JSON 数据类型。
{"name": "Alice","age": 30,"isStudent": false
}

数组(Array): 由方括号 [] 包围,包含一组值,值可以是任意有效的 JSON 数据类型。

["apple","banana","cherry"
]
JSON 示例

以下是一个包含不同类型的 JSON 数据的示例:

{"name": "Alice","age": 30,"isStudent": false,"courses": ["Math", "Science", "History"],"address": {"street": "123 Main St","city": "Anytown","zip": "12345"}
}

b.ObjectMapper类

ObjectMapper类(com.fasterxml.jackson.databind.ObjectMapper)是Jackson的主要类,它可以帮助我们快速的进行各个类型Json类型的相互转换

2.序列化与反序列化

a.序列化

对象序列化

JSON序列化是将Java对象转换为JSON字符串的过程。在JSON序列化过程中,Java对象的属性将被转换为JSON对象的键值对,如果Java对象包含其他Java对象或集合,这些嵌套对象也会被转换为嵌套的JSON对象和JSON数组

Java对象转换为JSON字符串最基本的方法就是使用​​ObjectMapper​​​类的​​writeValueAsString​​方法。这个方法接收一个Java对象作为参数,返回一个JSON字符串.
示例:

@Data
public class JacksonTest1 implements Serializable {public String name;public Integer age;public JacksonTest1(String name, Integer age){this.name=name;this.age=age;}
}
@Data
public class Test1 implements Serializable {private String  msg;private Integer age;private JacksonTest1 test;public Test1(String msg, Integer age, JacksonTest1 test){this.msg=msg;this.age=age;this.test=test;}
}
@Slf4j
@SpringBootTest
public class JacksonTest {@Testvoid test(){JacksonTest1 test=new JacksonTest1("zhangsan",11);Test1 test1=new Test1("lisi",18,test);ObjectMapper objectMapper=new ObjectMapper();try {String result=objectMapper.writeValueAsString(test1);log.info(result);} catch (JsonProcessingException e) {e.printStackTrace();}}
}

运行结果:
在这里插入图片描述
这里发现:
Test1对象的属性将被转换为JSON对象的键值对,其中Jascson1作为嵌套在Test1内的对象,被转换为嵌套的JSON对象
在这里插入图片描述

集合序列化

除了序列化单个Java对象,Jackson库还支持序列化Java集合,包括​​List​​​、​​Set​​​和​​Map​​​等。可以使用​​ObjectMapper​​​类的​​writeValueAsString​​方法将Java集合序列化为JSON字符串。

List
@Testvoid jacksonTest2() throws JsonProcessingException {ObjectMapper objectMapper=new ObjectMapper();List<String> list=new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");list.add("赵六");System.out.println(objectMapper.writeValueAsString(list));}

运行结果:
在这里插入图片描述

Set
@Testvoid jacksonTest3() throws JsonProcessingException {ObjectMapper objectMapper=new ObjectMapper();Set<String> set=new HashSet<>();set.add("张三");set.add("李四");set.add("王五");set.add("张三");System.out.println(objectMapper.writeValueAsString(set));}

运行结果:
在这里插入图片描述

Map
@Testvoid jacksonTest4() throws JsonProcessingException {ObjectMapper objectMapper=new ObjectMapper();Map<String,Integer>  map=new HashMap<>();map.put("zhansgan",14);map.put("lisi",15);map.put("wangwu",16);map.put("zhaoliu",17);System.out.println(objectMapper.writeValueAsString(map));}

运行结果:
在这里插入图片描述

b.反序列化

反序列化单个对象

JSON反序列化是将JSON字符串转换为Java对象的过程。在JSON反序列化过程中,JSON对象的键值对将被转换为Java对象的属性,如果JSON对象包含其他JSON对象或JSON数组,这些嵌套的JSON也会被转换为嵌套的Java对象和Java集合。

JSON字符串转换为Java对象的基本方法是使用​​ObjectMapper​​​类的​​readValue​​方法。这个方法接收两个参数:一个JSON字符串和一个Java类,它会将JSON字符串反序列化为指定的Java类对象。

@Testvoid jacksonTest1() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();CommonResult<String> commonResult = CommonResult.fail(500, "系统错误");String str;//序列化str = objectMapper.writeValueAsString(commonResult);log.info(str);//反序列化CommonResult<String> result= objectMapper.readValue(str,CommonResult.class);System.out.println("code: "+result.getCode()+" errMsg: "+result.getErrMsg());}

运行结果:
在这里插入图片描述

反序列化集合对象

除了反序列化单个Java对象,Jackson库还支持反序列化Java集合,包括​​List​​​、​​Set​​​和​​Map​​​等。但是不可以直接使用​​ObjectMapper​​​类的​​readValue​​方法将JSON字符串反序列化为Java集合,还需要搭配使用 TypeReference<T>

原因:

  • 类型不明确readValue方法在反序列化时需要明确目标类型。如果目标类型是一个通用的集合类型(如 ListMap),而没有提供具体的实现类(如 ArrayListHashMap),则可能导致反序列化失败或产生不正确的结果。

  • 类型擦除:在 Java 中,泛型是通过类型擦除实现的,这意味着在运行时,泛型类型的信息会丢失。这可能导致在反序列化时无法正确识别集合中元素的类型

  • JSON格式问题:如果反序列化的数据格式与目标集合类型不匹配(例如,JSON数组与预期的集合类型不一致),也会导致反序列化失败

  • 库的限制:某些反序列化库可能对集合的处理有特定的要求,可能需要使用特定的方法或构造函数,而不是通用的 readValue 方法。

所以,正确的使用方法是::在调用 readValue 时,使用具体的集合类型。例如,可以使用 TypeReference 来指定具体的泛型类型
List<MyClass> myList = objectMapper.readValue(jsonString, new TypeReference<List<MyClass>>() {});

关键字:word页面设计模板_辽宁建设工程信息网企业人员调动_企业宣传网站_seo职位招聘

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: