JSON-Java 包是一个将 Java 对象和 JSON 文件相互转换的参考实现,演示了如何将 JSON 文档解析为Java对象,以及如何从 Java 对象生成 JSON 文档。本文介绍下 JSON-Java 的基本使用方法;文中所使用到的软件版本:Java 1.8.0_321、org.json.json 20220924。
1、JSON-Java 特点
- 可靠且一致的结果
- 遵守 JSON 规范
- 易于构建、使用并可方便的引入到其他项目中
- 不需要外部的依赖
- 快速执行及低内存占用
- 保持向后兼容性
- 可在 Java 1.6 - 1.11 上使用
2、注解
JSON-Java 包目前提供了两个注解用于处理 Java 对象的序列化。
注解 | 作用域 | 说明 | 生效时机 |
@JSONPropertyIgnore | gette方法上 | 忽略该注解标注的属性 | 序列化时 |
@JSONPropertyName | gette方法上 | 指定属性对应 JSON 映射的名称 | 序列化时 |
3、具体使用
3.1、引入依赖
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220924</version>
</dependency>
3.2、定义实体类
package com.abc.demo.json.jsonjava;
import lombok.Setter;
import lombok.ToString;
import org.json.JSONPropertyIgnore;
import org.json.JSONPropertyName;
import java.time.LocalDateTime;
import java.util.List;
@ToString
@Setter
public class Student {
private Long id;
private LocalDateTime createTime;
private String name;
private List<String> homeAddress;
public Long getId() {
return id;
}
@JSONPropertyIgnore
public LocalDateTime getCreateTime() {
return createTime;
}
public String getName() {
return name;
}
@JSONPropertyName("addresses")
public List<String> getHomeAddress() {
return homeAddress;
}
}
3.3、序列化及反序列化
package com.abc.demo.json.jsonjava;
import org.json.*;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class JSONJavaCase {
private static final Logger logger = LoggerFactory.getLogger(JSONJavaCase.class);
/**
* 序列化
*/
@Test
public void serialize() {
//使用JSONObject存储数据
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", 1);
jsonObject.put("createTime", LocalDateTime.now());
jsonObject.put("name", "小明");
jsonObject.put("homeAddress", Arrays.asList("江苏", "上海"));
//调用toString方法即可转为json字符串
logger.info(jsonObject.toString());
Student student = new Student();
student.setId(1L);
student.setCreateTime(LocalDateTime.now());
student.setName("小明");
student.setHomeAddress(Arrays.asList("江苏", "上海"));
//普通java对象转JSONObject
jsonObject = new JSONObject(student);
logger.info(jsonObject.toString());
List<Student> list = new ArrayList<>();
list.add(student);
//list转JSONArray
JSONArray jsonArray = new JSONArray(list);
logger.info(jsonArray.toString());
}
/**
* 反序列化
*/
@Test
public void deserialize() {
String s = "{\"addresses\":[\"江苏\",\"上海\"],\"name\":\"小明\",\"id\":1}";
JSONTokener jsonTokener = new JSONTokener(s);
//JSON-Java 不能从json字符串直接转成java对象,需先转成JSONObject,然后通过JSONObject的api获取数据
JSONObject jsonObject = new JSONObject(jsonTokener);
logger.info(jsonObject.getInt("id") + "");
logger.info(jsonObject.getString("name"));
logger.info(jsonObject.getJSONArray("addresses").toString());
}
}