慕課網_《JSON快速入門(Java版)》學習總結

時間:2017年05月21日星期日
說明:本文部份內容均來自慕課網。@慕課網:http://www.imooc.com
教學示例源碼:無
我的學習源碼:https://github.com/zccodere/s...java

第一章:課程概述

1-1 JSON課程介紹

課程須知git

本課程面向全部使用Java語言進行開發的小夥伴。

JSON是行業內使用最爲普遍的數據傳輸格式
課程大綱github

JSON基礎知識
Java中兩種常見的JSON處理方式
綜合運用

第二章:基礎入門

2-1 什麼是JSON

什麼是JSONapache

JSON是一種與開發語言無關的、輕量級的數據格式。全稱JavaScript Object Notation。

優勢json

易於人的閱讀和編寫
易於程序解析與生成

一個簡單的JSON樣例數組

clipboard.png

2-2 數據類型表示

數據結構數據結構

Object:{}
Array:, []

基本類型maven

string
number
true
false
null

Object:對象數據結構ide

使用花括號{}包含的鍵值對結構,Key必須是string類型,value爲任何基本類型或數據結構。

示意圖函數

clipboard.png

Array:數組數據格式

使用中括號[]來起始,並用逗號, 來分隔元素。

示意圖

clipboard.png

2-3 JSON數據演示

代碼演示:

{
    "name" : "王小二",
    "age" : 25.2,
    "birthday" : "1990-01-01",
    "school" : "藍翔",
    "major" : ["理髮","挖掘機"],
    "has_girlfriend" : false,
    "car" : null,
    "house" : null,
    "comment" : "這是一個註釋"
}

第三章:JSON in Java

3-1 JSON的使用

項目搭建

首先建立一個項目,教學使用maven進行構建,我學習時使用gradle進行構建。因本次課程以學習JSON爲主,因此省略項目搭建過程,具體源碼可參考個人github地址。

使用JSONObject生成JSON格式數據

代碼演示:

/**
 * 經過 JSONObject 生成JSON
 */
private static void createJsonByJsonObject() {
    JSONObject wangxiaoer = new JSONObject();
    // 定義nullObject
    Object nullObject = null;
    wangxiaoer.put("name","王小二");
    wangxiaoer.put("age",25.2);
    wangxiaoer.put("birthday","1990-01-01");
    wangxiaoer.put("school","藍翔");
    wangxiaoer.put("major",new String[]{"理髮","挖掘機"});
    wangxiaoer.put("has_girlfriend",false);
    // 使用nullObject跳過編譯器檢查
    wangxiaoer.put("car",nullObject);
    wangxiaoer.put("house",nullObject);
    wangxiaoer.put("comment","這是一個註釋");

    System.out.println(wangxiaoer.toString());

}

3-2 使用Map構建JSON

代碼演示:

/**
 * 經過 HashMap 生成JSON
 */
public static void createJsonByMap(){
    Map<String,Object> wangxiaoer = new HashMap<String,Object>();

    Object nullObject = null;
    wangxiaoer.put("name","王小二");
    wangxiaoer.put("age",25.2);
    wangxiaoer.put("birthday","1990-01-01");
    wangxiaoer.put("school","藍翔");
    wangxiaoer.put("major",new String[]{"理髮","挖掘機"});
    wangxiaoer.put("has_girlfriend",false);
    // 使用nullObject跳過編譯器檢查
    wangxiaoer.put("car",nullObject);
    wangxiaoer.put("house",nullObject);
    wangxiaoer.put("comment","這是一個註釋");
    // 經過 JSONObject 的構造函數接收一個 Map 生成 JSON
    System.out.println(new JSONObject(wangxiaoer).toString());
}

3-3 使用Java Bean構建對象

代碼演示:

1.構建JavaBean

package com.myimooc.json.model;

import java.util.Arrays;

/**
 * Created by ChangComputer on 2017/5/21.
 */
public class Diaosi {
    private String name;
    private String school;
    private boolean has_girlfriend;
    private double age;
    private Object car;
    private Object house;
    private String[] major;
    private String comment;
    private String birthday;
    // 使用 transient 關鍵字,生成 JSON 時忽略該字段
    private transient String ignore;

    public String getIgnore() {
        return ignore;
    }

    public void setIgnore(String ignore) {
        this.ignore = ignore;
    }

    public String getName() {
        return name;
    }

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

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }

    public boolean isHas_girlfriend() {
        return has_girlfriend;
    }

    public void setHas_girlfriend(boolean has_girlfriend) {
        this.has_girlfriend = has_girlfriend;
    }

    public double getAge() {
        return age;
    }

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

    public Object getCar() {
        return car;
    }

    public void setCar(Object car) {
        this.car = car;
    }

    public Object getHouse() {
        return house;
    }

    public void setHouse(Object house) {
        this.house = house;
    }

    public String[] getMajor() {
        return major;
    }

    public void setMajor(String[] major) {
        this.major = major;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Diaosi{" +
                "name='" + name + '\'' +
                ", school='" + school + '\'' +
                ", has_girlfriend=" + has_girlfriend +
                ", age=" + age +
                ", car=" + car +
                ", house=" + house +
                ", major=" + Arrays.toString(major) +
                ", comment='" + comment + '\'' +
                ", birthday='" + birthday + '\'' +
                ", ignore='" + ignore + '\'' +
                '}';
    }
}

2.編寫構建代碼

/**
 * 經過 JavaBean 生成JSON【推薦使用】
 */
public static void createJsonByBean(){
    Diaosi wangxiaoer = new Diaosi();

    wangxiaoer.setName("王小二");
    wangxiaoer.setAge(25.2);
    wangxiaoer.setBirthday("1990-01-01");
    wangxiaoer.setSchool("藍翔");
    wangxiaoer.setMajor(new String[]{"理髮","挖掘機"});
    wangxiaoer.setHas_girlfriend(false);
    wangxiaoer.setCar(null);
    wangxiaoer.setHouse(null);
    wangxiaoer.setComment("這是一個註釋");

    // 經過 JSONObject 的構造函數接收一個 Bean 生成 JSON
    System.out.println(new JSONObject(wangxiaoer).toString());
}

3-4 從文件讀取JSON

代碼演示:

1.添加common-io依賴

// https://mvnrepository.com/artifact/commons-io/commons-io
compile group: 'commons-io', name: 'commons-io', version: '2.5'

2.準備JSON數據文件

{
    "name" : "王小二",
    "age" : 25.2,
    "birthday" : "1990-01-01",
    "school" : "藍翔",
    "major" : ["理髮","挖掘機"],
    "has_girlfriend" : false,
    "car" : null,
    "house" : null,
    "comment" : "這是一個註釋"
}

3.編寫讀取代碼

package com.myimooc.json.demo;

import org.apache.commons.io.FileUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.File;
import java.io.IOException;

/**
 * 讀取 JSON 數據演示類
 * Created by ChangComputer on 2017/5/21.
 */
public class ReadJsonSample {

    public static void main(String[] args) throws IOException {
        createJsonByFile();
    }

    /**
     * 讀取 JSON 數據
     * */
    public static void createJsonByFile() throws IOException {
        File file = new File(ReadJsonSample.class.getResource("/wangxiaoer.json").getFile());

        String content = FileUtils.readFileToString(file,"UTF-8");

        JSONObject jsonObject = new JSONObject(content);

        System.out.println("姓名:"+jsonObject.getString("name"));
        System.out.println("年齡:"+jsonObject.getDouble("age"));
        System.out.println("有沒有女友?:"+jsonObject.getBoolean("has_girlfriend"));

        JSONArray majorArray = jsonObject.getJSONArray("major");
        for (int i = 0 ; i < majorArray.length(); i++) {
            System.out.println("專業"+(i+1)+":"+majorArray.get(i));
        }

        // 判斷屬性的值是否爲空
        if(!jsonObject.isNull("nickname")){
            System.out.println("暱稱:"+jsonObject.getDouble("nickname"));
        }
    }
}

3-5 從文件讀取JSON判斷null

代碼演示:

// 判斷屬性的值是否爲空
if(!jsonObject.isNull("nickname")){
    System.out.println("暱稱:"+jsonObject.getDouble("nickname"));
}

3-6 總結

本章總結

講解了如何生成JSON格式數據
講解了如何解析JSONObject

第四章:GSON的使用

4-1 GSON介紹

開源地址

https://github.com/google/gson

GSON優勢

功能更增強大
性能更加出色
使用方式更加便捷和簡單

4-2 GSON生成JSON數據

代碼演示:

1.添加依賴

// https://mvnrepository.com/artifact/com.google.code.gson/gson
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'

2.編寫代碼

package com.myimooc.json.gson;

import com.google.gson.FieldNamingStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.myimooc.json.model.Diaosi;

import java.lang.reflect.Field;

/**
 * 使用 GSON 進行 JSON 相關操做
 * Created by ChangComputer on 2017/5/21.
 */
public class GsonCreateSample {

    public static void main(String[] args) {
        createJsonByGsonBean();
    }

    /**
     *
     * 經過 JavaBean 生成JSON【推薦使用】
     */
    private static void createJsonByGsonBean() {
        Diaosi wangxiaoer = new Diaosi();

        wangxiaoer.setName("王小二");
        wangxiaoer.setAge(25.2);
        wangxiaoer.setBirthday("1990-01-01");
        wangxiaoer.setSchool("藍翔");
        wangxiaoer.setMajor(new String[]{"理髮","挖掘機"});
        wangxiaoer.setHas_girlfriend(false);
        wangxiaoer.setCar(null);
        wangxiaoer.setHouse(null);
        wangxiaoer.setComment("這是一個註釋");
        wangxiaoer.setIgnore("不要看見我");

        GsonBuilder gsonBuilder = new GsonBuilder();
        // 設置格式化輸出
        gsonBuilder.setPrettyPrinting();
        // 自定義轉換策略
        gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() {
            @Override
            public String translateName(Field f) {
                if(f.getName().equals("name")){
                    return "NAME";
                }
                return f.getName();
            }
        });
        // 生成Gson
        Gson gson = gsonBuilder.create();
        System.out.println(gson.toJson(wangxiaoer));
    }
}

4-3 生成JSON數據

代碼演示:

package com.myimooc.json.gson;

import com.google.gson.FieldNamingStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.myimooc.json.model.Diaosi;

import java.lang.reflect.Field;

/**
 * 使用 GSON 進行 JSON 相關操做
 * Created by ChangComputer on 2017/5/21.
 */
public class GsonCreateSample {

    public static void main(String[] args) {
        createJsonByGsonBean();
    }

    /**
     *
     * 經過 JavaBean 生成JSON【推薦使用】
     */
    private static void createJsonByGsonBean() {
        Diaosi wangxiaoer = new Diaosi();

        wangxiaoer.setName("王小二");
        wangxiaoer.setAge(25.2);
        wangxiaoer.setBirthday("1990-01-01");
        wangxiaoer.setSchool("藍翔");
        wangxiaoer.setMajor(new String[]{"理髮","挖掘機"});
        wangxiaoer.setHas_girlfriend(false);
        wangxiaoer.setCar(null);
        wangxiaoer.setHouse(null);
        wangxiaoer.setComment("這是一個註釋");
        wangxiaoer.setIgnore("不要看見我");

        GsonBuilder gsonBuilder = new GsonBuilder();
        // 設置格式化輸出
        gsonBuilder.setPrettyPrinting();
        // 自定義轉換策略
        gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() {
            @Override
            public String translateName(Field f) {
                if(f.getName().equals("name")){
                    return "NAME";
                }
                return f.getName();
            }
        });
        // 生成Gson
        Gson gson = gsonBuilder.create();
        System.out.println(gson.toJson(wangxiaoer));
    }
}

4-4 GSON解析

代碼演示:

package com.myimooc.json.gson;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.myimooc.json.demo.ReadJsonSample;
import com.myimooc.json.model.Diaosi;
import com.myimooc.json.model.DiaosiWithBirthday;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;

/**
 * 使用Gson解析 JSON 文件
 * Created by ChangComputer on 2017/5/21.
 */
public class GsonReadSample {
    public static void main(String[] args) throws IOException {
        createJsonByGsonFile();
    }

    /**
     * 讀取 JSON 數據
     * */
    public static void createJsonByGsonFile() throws IOException {
        File file = new File(GsonReadSample.class.getResource("/wangxiaoer.json").getFile());

        String content = FileUtils.readFileToString(file,"UTF-8");

        // 無日期轉換
        Gson gson = new Gson();

        Diaosi wangxiaoer = gson.fromJson(content,Diaosi.class);

        System.out.println(wangxiaoer.toString());

        // 帶日期轉換
        Gson gson2 = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();

        DiaosiWithBirthday wangxiaoer2 = gson2.fromJson(content,DiaosiWithBirthday.class);

        System.out.println(wangxiaoer2.getBirthday().toString());

        // 集合類解析
        System.out.println(wangxiaoer2.getMajor());
        System.out.println(wangxiaoer2.getMajor().getClass());

    }
}

4-5 GSON解析日期轉換

代碼演示:

// 帶日期轉換
Gson gson2 = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();

DiaosiWithBirthday wangxiaoer2 = gson2.fromJson(content,DiaosiWithBirthday.class);

System.out.println(wangxiaoer2.getBirthday().toString());

4-6 集合類解析

代碼演示:

// 替換爲集合類
private List<String> major;

GSON會自動解析集合類字段

// 集合類解析
System.out.println(wangxiaoer2.getMajor());
System.out.println(wangxiaoer2.getMajor().getClass());

4-7 總結

JSON和GSON

JSON是Android SDK官方的庫
GSON適用於服務端開發
GSON比JSON功能更強大

JSON庫的特色

功能:映射Java Object與json格式數據
1.經過Annotation註解來聲明
2.支持自定義屬性名稱
3.支持包含或排序屬性
4.支持自定義接口本身完成解析或生成過程
相關文章
相關標籤/搜索