Java 操作 JSON 数据(6)--JSON-Java 操作 JSON 数据
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()); } }