0
点赞
收藏
分享

微信扫一扫

Java 操作 JSON 数据(6)--JSON-Java 操作 JSON 数据

J简文 2023-01-08 阅读 98

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());
}
}

 



举报

相关推荐

0 条评论