Java 中使用 JSON
一、JSON 概述
JSON(JavaScript Object Notation)是一种 轻量级的数据交互格式 ,与开发语言无关。JSON容易阅读和编写,同时也易于机器解析和生成,因此 常用来在前后端进行数据交换 。
1、JSON的数据结构
json对象:一个对象包含一系列 非排序的键/值对,一个对象以 {开始 ,并以 }结束。每个键/值对之间使用冒号:分区。多个键/值对之间通过 逗号,分割。
值(value):可以是双引号括起来的字符串(String),数值(number)、true/false 、null、对象(object)或者数组(array)。
二、在Java中使用JSONObject
前提我们创建的是maven项目,在maven项目的pom文件中添加依赖
1、添加依赖:json官方
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20170516</version>
</dependency>
2、JSONObjectTest
package JSON;
import org.json.JSONObject;
/*测试 JSONObject 这个对象*/
public class JsonObjectTest {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();// 创建JSONObject对象
jsonObject.put("name","李四");
jsonObject.put("age",20);
jsonObject.put("birth","2000-05-05");
jsonObject.put("hasGrilfriend",true);
jsonObject.put("hobbies",new String[]{"打游戏","打篮球"});
if(!jsonObject.isNull("name")){
System.out.println(jsonObject.getString("name"));
System.out.println(jsonObject.toString());
3、JSON格式化校验
4、JavaBean 转化为JSON(JSONObject)
JavaBean对象:User
package bean;
* JavaBean是一种特殊的java类,可以将多个对象封装到一个对象(bean)中.
* 特点是可序列化,提供无参构造器、提供getter和setter 方法访问对象的属性。
* 所有的属性都是private私有化的。
public class User {
private String name;
private int age;
private String birth;
private String[] hobbies;
// 无参构造方法
public User(){}
// getter / setter 方法
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 getBirth() {
return birth;
public void setBirth(String birth) {
this.birth = birth;
public String[] getHobbies() {
return hobbies;
public void setHobbies(String[] hobbies) {
this.hobbies = hobbies;
测试方法:JsonTest
import bean.User;
import org.json.JSONObject;
import org.junit.Test;
public class JsonTest {
@Test
public void beanToJsonTest(){// 将我们的javabean对象【User】转化为JSON对象
User user = new User();// 创建一个User对象
user.setName("大白");
user.setAge(20);
user.setBirth("2000-05-05");
user.setHobbies(new String[]{"看书","写代码"});
JSONObject jsonObject = new JSONObject(user);
System.out.println(jsonObject.toString());
三、在java中使用GSON
GSON是Google的一个开源项目,其主要特点是可以将JavaBean转化为JSON数据,也可以将JSON数据转化成JavaBean。
1、pom文件添加依赖
<!--谷歌开发的JSON库:GSON-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
</dependency>
2、JavaBean 转化成 JSON(GSON)
@Test
public void beanToJsonByGson(){
User user = new User();
user.setName("大白");
user.setAge(20);
user.setBirth("2000-05-05");
user.setHobbies(new String[]{"看书","写代码"});
Gson gson = new Gson();
System.out.println(gson.toJson(user));
}
3、JSON 转化成 JavaBean(GSON)
修改之前我们birth属性的数据类型为 Date
package bean;
import java.util.Date;
* JavaBean是一种特殊的java类,可以将多个对象封装到一个对象(bean)中.
* 特点是可序列化,提供无参构造器、提供getter和setter 方法访问对象的属性。
* 所有的属性都是private私有化的。
public class User {
private String name;
private int age;
// private String birth; 这是我们之前的
private Date birth;// 现在我们更改成 Date类型
private String[] hobbies;
// 无参构造方法
public User(){}
// getter / setter 方法
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 Date getBirth() {
return birth;
public void setBirth(Date birth) {
this.birth = birth;
public String[] getHobbies() {
return hobbies;
public void setHobbies(String[] hobbies) {
this.hobbies = hobbies;
测试代码:
@Test
public void jsonToBeanByGson(){
// 第一步:我们需要创建一个json格式的数据
String jsonStr = "{\"name\":\"张三\",\"age\":22,\"hobbies\":[\"看电影\",\"敲代码\"],\"birth\":\"2000-05-05\"}";
GsonBuilder gb = new GsonBuilder();
// 设置日期转化格式
gb.setDateFormat("yyyy-MM-dd");
Gson gson = gb.create();
/* fromJson方法中
第一个参数:待解析的json字符串
第二个参数:解析对应的Javabean对象【User】
User user = gson.fromJson(jsonStr,User.class);//将JSON 》 user
System.out.println(user.getBirth().toLocaleString());
System.out.println(user.getHobbies()[1]);
}
四、FastJSON
FastJSON是阿里巴巴的产品,效率高。
1、pom文件中添加依赖
<!--阿里巴巴开发的JSON库:FastJSON-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.0</version>
</dependency>
2、生成JSON对象
@Test
public void jsonByFastJson(){// 生成一个json对象
JSONArray jsonArray = new JSONArray();// json数组:存放JSONObject
for(int i = 0 ;i<2;i++){
JSONObject jsonObject = new JSONObject();
jsonObject.put("name","张三");
jsonObject.put("age",21);
jsonObject.put("birth","2020/05/05 12:12:12");
jsonArray.add(jsonObject);
System.out.println(jsonArray.getString(0));
System.out.println(jsonArray.getString(1));
}
3、将Java对象转化为JSON格式
定义Person类 》 JavaBean对象
package bean;
import java.util.Date;
public class Person {
private String name;
private int age;
private char sex;
private Date date;
// getter setter
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 char getSex() {
return sex;
public void setSex(char sex) {
this.sex = sex;
public Date getDate() {
return date;
public void setDate(Date date) {
this.date = date;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
", date=" + date +
'}';
定义测试类:FastJsonTest
import bean.Person;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.junit.Test;
import java.util.Date;
public class FastJsonTest {
@Test
public void method(){
Person person = new Person();
person.setName("张三");
person.setAge(21);
person.setSex('男');
person.setDate(new Date());
System.out.println(person.getName());
System.out.println(person.toString());
@Test
public void javaToJson(){
* 需求:
* 将我们现在Person对象【javabean对象】转化成JSON格式
* 分析:
* 1、怎么将Person对象转化为json格式
* 解决:
* 借助第三方的Java库:FastJSON -》阿里巴巴
* 思考:添加jar包 或者 maven项目添加依赖
* 我们现在创建的项目是:maven项目
* 添加FastJSON依赖:pom 、groupId artifactid、version
Person person = new Person();
person.setName("张三");
person.setAge(21);
person.setSex('男');
person.setDate(new Date());
// JSON类 》 package : com.alibaba.fastjson
String jsonOutput = JSON.toJSONString(person);// 将Java对象转化为JSON格式
// JSONObject 类 》因为: extends JSON 所以:可以访问 JSON中 toJSONString这个方法
String jsonOutput_1 = JSONObject.toJSONString(person);
System.out.println(jsonOutput_1);
* 当我们看到输出的JSON格式中的date键对应的值的时候发现了问题!
* 问题:"date":1652945995077
* 解决:格式化日期
* toJSONStringWithDateFormat(Object object, String dateFormat)
* object:表示我们要转化的java对象即Person
* dateFormat:日期格式的形式
String jsonOutput_2 = JSON.toJSONStringWithDateFormat(person,"yyyy-MM-dd");
System.out.println(jsonOutput_2);
注意:
1、日期格式化:toJSONStringWithDateFormat(Object object ,String dateFormat)
2、日期格式化:通过注解 -》 @JSONField(format)
format参数用于格式化date属性
这种通过注解方式的操作,是作用与我们的javabean对象【Person类】中的日期【java.util.Date】属性【date】
4、将java对象集合转化成JSON格式数组
准备工作:1、定义一个集合 -》用来存放我们实例化的java对象
@Test
public void javaCollectionToJson(){
* 分析:
* 1、定义集合【List】,用来存放我们的java实例对象
* 2、创建java实例对象【new】 -> 我们现在通过匿名对象的方式去被添加到集合中
* 3、借助集合中的方法【add】,添加java实例对象
* 4、借助fastJson中的JSON类中的toJSONString(Object object)将我们的java集合对象转化成json格式数组
List<Person> lists = new ArrayList<Person>();