第十五次总结 JSON

  1. 什么是JSON?
  2. GSON如何解析JSON文件?
  3. 如何使用第三方的工具库?

1.什么是JSON?

 JSON :  JavaScript Object Notation

javaScript 用于数据传输的一种格式

 

JSON数据的格式:

用一对大括号表示JSON对象,
大括号中由多个名值对组成,每个名值对之间用 逗号 隔开
名和值之间用 冒号 隔开
同一个JSON对象内部的名字不能重复的,值可以重复
JSON的名字是一个字符串
JSON的值可以是 数字,字符串,JSON对象,数组,可以是boolean值
{名:值,名:值,名:值,名:值}

 

案例:

    {
        "num":1234,
        "name":"张三",
        "age":20,
        "tel":{"zuoji":"0731-88889999","mobile":"13888889999"},
        "aihao":["篮球","游戏","游泳"],
        "aa":[{},{},{}]
    }

 

JSON数组

    [{},{},{}]

 

 

JSON数据的解析:

在JavaScript中可以直接解析
在Java中默认是没有JSON的解析器的
如果需要在Java中解析JSON,就需要下载第三方的解析器
GSON Google公司开发的JSON解析器
fastjson 阿里巴巴提供的JSON解析器

 


2.GSON如何解析JSON文件?

JSON文件内容

 

 

 Student类
public class Student {
    private int age;
    private String name;
    private int num;
    private String sex;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", num=" + num +
                ", sex='" + sex + '\'' +
                '}';
    }
}

 

如何取得一个JSON对象?

JosnPaser类
public class JsonPaser {
    public static void main(String[] args) throws Exception {
        //要解析的Json文件地址
        File f = new File("xml/stus.json");
        FileReader reader = new FileReader(f);

        //创建Gson解析器对象
        Gson gson = new Gson();
        //将JSON数据转换成Java对象
        Student stu = gson.fromJson(reader, Student.class);
        System.out.println(stu);
    }
}

 

输出结果:

 

 

 

如果是上诉代码能否获得JSON数组?

JSON文件

 

 

 
输出结果:

JOSN语法错误

 

 

 希望找到的是一个对象但是找到的是一个数组

 

 

 

如何取得一个JSON数组?

JosnPaser类
public class JosnPaser {
    public static void main(String[] args) throws Exception {
        //要解析的Json文件地址
        String path = "D:\\idea11\\untitled\\解析\\src\\JSONC\\Demo1.json";
        File file = new File(path);
        FileReader reader =new FileReader(file);
        //创建Gson解析器对象
        Gson gson = new Gson();
        //将JSON数组数据转换成Java数组对象
        ArrayList<Student> msg=gson.fromJson(reader,ArrayList.class);
        System.out.println(msg);
    }
}

 

 输出结果:

 

 

 是否可以实现数组的遍历?

  ArrayList<Student> msg=gson.fromJson(reader,ArrayList.class);
        for (Student stu : msg){
            System.out.println(stu);
        }

 

 

输出结果:

当试图将对象强制转换为不是实例的子类时抛出  ClassCastException

LickedTreeMap  不能 实例为  Student 类型

同样可以获得JSON数组

//将JSON数组数据转换成Java数组对象
        ArrayList<LinkedTreeMap> msg=gson.fromJson(reader,ArrayList.class);
        System.out.println(msg);
        }

 

 

如何将java中的数组对象写成Josn格式?

JosnPaser类

 

ArrayList<Student> list = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            Student s = new Student();
            s.setNum(i);
            s.setName("名字" + i);
            s.setAge(10 + i);
            s.setSex(i % 2 == 0 ? '男' : '女');
            list.add(s);
        }

        //将Java中的数组对象写成Json格式
        String msg = gson.toJson(list);
        //字符流
        FileWriter writer = new FileWriter(f);
        writer.write(msg);
        //关流
        writer.flush();
        ArrayList<Student> list1 = gson.fromJson(reader, ArrayList.class);
        System.out.println(list1);

 

 

输出结果:


 

3.如何使用第三方的工具库?

idea

a.下载第三方资源
b.在idea中引入jar包
在模块中新建一个文件夹,一般命名为lib
将gson.2.8.6.jar拷贝到lib文件夹中
File->Project Structure
在对话框中选择左边的 Libraries
点击 +
选择 Java
在弹出框中选择gson.2.8.6.jar
在新的对话框中选择要使用jar包的模块

Eclipse

c.在Eclipse中引入jar包
在工程中新建文件夹lib
将gson.2.8.6.jar拷贝到lib文件夹中
鼠标右键选中jar包-->Build Path --> Add to Build Path

 

posted @ 2020-08-08 22:45  Zc小白  阅读(168)  评论(0)    收藏  举报