Java第四十二天,Json
一、概念
全称 JavaScrlipt object Notation,译为Javascript对象表示法;Json是存储和交换文本信息的语法。类似XML,但比XML更小、更快,更易解析
二、语法
1.基本规则
- JSON 数据是由键值对构成的
 - JSON的键可以用 引号(单双均可)引起来,也可以不用引号
 - JSON的值的取值类型如下:
 
- 数字(整数或浮点数)
 - 字符串(在双引号中)
 - 逻辑值(true | false)
 - 数组([...])
 - 对象({...})
 - null
 
- 多个键值对由逗号分隔
 - 花(大)括号保存对象
 - 方括号表示数组
 
2.示例
let person = {"name": "张三", age: 23, 'gender': true};
let persons = {
    "persons": [
        {"name": "张三", "age": 23, "gender": true},
        {"name": "李四", "age": 24, "gender": true},
        {"name": "王五", "age": 25, "gender": false}
    ]
};
let persons = [
	{"name": "张三", "age": 23, "gender": true},
	{"name": "李四", "age": 24, "gender": true},
	{"name": "王五", "age": 25, "gender": true}
];
3.如何通过 JSON 对象获取数据
- Json对象.键名
 - Json对象[“键名”]
 - Json数组对象[索引值]
 
三、Json 对象和 Java 对象之间的相互转换
1.Json对象 转 Java对象
(1)常见解析器
- Jsonlib
 - Gson
 - fastjson
 - jackson
 
(2)jackson 的使用
Java实体类
package web.entil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.Date;
public class Student {
    private String name;
    private String sex;
    private Integer age;
    // @JsonIgnore 忽略该属性,禁止转换 json
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                '}';
    }
}
Json 转 Java 核心代码
package web.entil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
public class Test {
    public static void main(String[] args) {
        // 创建 Java 实体类对象
        Student student = new Student();
        student.setName("张三");
        student.setSex("男");
        student.setAge(20);
        student.setBirthday(new Date());
        // 创建 Jackson 核心对象
        ObjectMapper mapper = new ObjectMapper();
        String stuStr = null;
        try {
            stuStr = mapper.writeValueAsString(student);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        Student stu = new Student();
        /*
        Java 对象转 Json 对象需要用到 Jackson 的 readValue 方法
        参数1:原 Json 字符串
        参数2:目的 Java 实体类 字节码文件
         */
        try {
            stu = mapper.readValue(stuStr, Student.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(stu);
    }
}
2.Java对象 转 Json对象
(1)常见解析器
- Jsonlib
 - Gson
 - fastjson
 - jackson
 
(2)jackson 的使用
// jackson jar依赖包
https://download.csdn.net/download/ITlanyue/12726758
①基本使用
Java 实体类
package web.entil;
public class Student {
    private String name;
    private String sex;
    private Integer age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}
Java 转换 Json 核心代码
package web.entil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test {
    public static void main(String[] args) {
        // 创建 Java 实体类对象
        Student student = new Student();
        student.setName("张三");
        student.setSex("男");
        student.setAge(20);
        // 创建 Jackson 核心对象
        ObjectMapper mapper = new ObjectMapper();
        /*
         * 转换
         * writeValue(参数1,obj)
         * 参数1:
         * 		File:将obj对象转换为JSON字符串,并保存到指定的文件中
         * 		Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
         * 		OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
         *
         * writeValueAsString(Object obj) ===> 将对象转换为字符串
         *
         * writeValueAs...(Object obj) ===> 将对象转换为...
         */
        String stuStr = null;
        try {
            stuStr = mapper.writeValueAsString(student);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        System.out.println(stuStr);
    }
}
②注解使用
注意:
可以应用于属性或者对应的 getter 方法上
@JsonIgnore ===> 排除属性;对应属性将不会被转换为字符串
@JsonFormat ===> 对属性值进行格式化,指明期望类型
Java 实体类
package web.entil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.Date;
public class Student {
    private String name;
    private String sex;
    private Integer age;
    
    // @JsonIgnore 忽略该属性,禁止转换 json
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                '}';
    }
}
Java 转 Json 核心代码
package web.entil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;
public class Test {
    public static void main(String[] args) {
        // 创建 Java 实体类对象
        Student student = new Student();
        student.setName("张三");
        student.setSex("男");
        student.setAge(20);
        student.setBirthday(new Date());
        // 创建 Jackson 核心对象
        ObjectMapper mapper = new ObjectMapper();
        /*
         * 转换
         * writeValue(参数1,obj)
         * 参数1:
         * 		File:将obj对象转换为JSON字符串,并保存到指定的文件中
         * 		Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
         * 		OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
         *
         * writeValueAsString(Object obj) ===> 将对象转换为字符串
         *
         * writeValueAs...(Object obj) ===> 将对象转换为...
         */
        String stuStr = null;
        try {
            stuStr = mapper.writeValueAsString(student);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        System.out.println(stuStr);
    }
}

                
            
        
浙公网安备 33010602011771号