相关文章推荐
低调的饭盒  ·  Vue3 跟着尤雨溪学 ...·  2 年前    · 
淡定的钥匙  ·  限制 Confluence 6 ...·  2 年前    · 
性感的鞭炮  ·  Python 使用 xlwings 往 ...·  2 年前    · 
飘逸的鞭炮  ·  用两块RTX ...·  2 年前    · 

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