一、Json 简介
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得json成为理想的数据交换语言。比起xml的灵活性,json更加轻量级、易于阅读和书写。
下面是一个Json的例子:
{ "name": "John", "age": 30, "city": "New York" }
二、Java Json 序列化
1. jackson 库
Jackson 是一款快速、低消耗、多功能的 Java 库,用于处理 Java 对象与 JSON 数据之间的转换。Jackson 提供了两个主要的 API:一是 Streaming API,另一个是 Data Binding API。
2. Fastjson 库
Fastjson 是一个 Java 的 JSON 解析器和生成器,它是目前最快的 JSON 处理器之一。
三、使用 Jackson 库进行 Json 序列化
1. 添加 Jackson 库的 Maven 依赖
在 pom.xml 文件中添加以下依赖:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency>
2. 创建一个 Java 类
在项目中创建一个实体类,例如 Person:
public class Person { private String name; private int age; private String city; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } }
3. 在代码中实现序列化
下面是一个例子,将 person 对象序列化为 json 格式:
public class JsonDemo { public static void main(String[] args) throws JsonProcessingException { Person person = new Person(); person.setName("John"); person.setAge(30); person.setCity("New York"); ObjectMapper objectMapper = new ObjectMapper(); String jsonString = objectMapper.writeValueAsString(person); System.out.println(jsonString); } }
输出结果如下:
{"name":"John","age":30,"city":"New York"}
四、使用 Fastjson 库进行 Json 序列化
1. 添加 Fastjson 库的 Maven 依赖
在 pom.xml 文件中添加以下依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
2. 在代码中实现序列化
下面是一个例子,将 person 对象序列化为 json 格式:
public class JsonDemo { public static void main(String[] args) { Person person = new Person(); person.setName("John"); person.setAge(30); person.setCity("New York"); String jsonString = JSON.toJSONString(person); System.out.println(jsonString); } }
输出结果如下:
{"name":"John","age":30,"city":"New York"}
五、Json 序列化注意事项
1.对象必须提供无参构造函数
Jackson 和 Fastjson 在编写时,都需要默认构造函数(无参构造函数)。因为在反序列化时,需要先创建一个空对象,再给其成员变量赋值。所以,如果对象没有无参构造函数,就会反序列化失败。
2.对象成员变量必须保留 getter 和 setter 方法
在进行序列化和反序列化时,会通过反射获取对象的成员变量,如果这些成员变量没有提供 getter 和 setter 方法,则会出现异常。
3.其他注意事项
对于特殊字符,例如缩进和换行等,可以设置序列化的特性,比如 jackson 中可以设置 SerializationFeature.INDENT_OUTPUT。
结论
Java Json 序列化是一种比较常见的操作。本文详细介绍了使用 Jackson 和 Fastjson 库进行 Json 序列化的方法,同时讲述了在进行序列化时需要注意的事项。相信对 Java 开发人员进行 Json 序列化应该能够有所帮助。