摘要:時間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼無個人學(xué)習(xí)源碼第一章課程概述課程介紹課程須知本課程面向所有使用語言進(jìn)行開發(fā)的小伙伴。
時間:2017年05月21日星期日
說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com
教學(xué)示例源碼:無
個人學(xué)習(xí)源碼:https://github.com/zccodere/s...
課程須知
本課程面向所有使用Java語言進(jìn)行開發(fā)的小伙伴。
JSON是行業(yè)內(nèi)使用最為廣泛的數(shù)據(jù)傳輸格式
課程大綱
JSON基礎(chǔ)知識 Java中兩種常見的JSON處理方式 綜合運(yùn)用第二章:基礎(chǔ)入門 2-1 什么是JSON
什么是JSON
JSON是一種與開發(fā)語言無關(guān)的、輕量級的數(shù)據(jù)格式。全稱JavaScript Object Notation。
優(yōu)點(diǎn)
易于人的閱讀和編寫 易于程序解析與生成
一個簡單的JSON樣例
2-2 數(shù)據(jù)類型表示數(shù)據(jù)結(jié)構(gòu)
Object:{} Array:, []
基本類型
string number true false null
Object:對象數(shù)據(jù)結(jié)構(gòu)
使用花括號{}包含的鍵值對結(jié)構(gòu),Key必須是string類型,value為任何基本類型或數(shù)據(jù)結(jié)構(gòu)。
示意圖
Array:數(shù)組數(shù)據(jù)格式
使用中括號[]來起始,并用逗號, 來分隔元素。
示意圖
2-3 JSON數(shù)據(jù)演示代碼演示:
{ "name" : "王小二", "age" : 25.2, "birthday" : "1990-01-01", "school" : "藍(lán)翔", "major" : ["理發(fā)","挖掘機(jī)"], "has_girlfriend" : false, "car" : null, "house" : null, "comment" : "這是一個注釋" }第三章:JSON in Java 3-1 JSON的使用
項(xiàng)目搭建
首先創(chuàng)建一個項(xiàng)目,教學(xué)使用maven進(jìn)行構(gòu)建,我學(xué)習(xí)時使用gradle進(jìn)行構(gòu)建。因本次課程以學(xué)習(xí)JSON為主,所以省略項(xiàng)目搭建過程,具體源碼可參考我的github地址。
使用JSONObject生成JSON格式數(shù)據(jù)
代碼演示:
/** * 通過 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","藍(lán)翔"); wangxiaoer.put("major",new String[]{"理發(fā)","挖掘機(jī)"}); 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構(gòu)建JSON
代碼演示:
/** * 通過 HashMap 生成JSON */ public static void createJsonByMap(){ Map3-3 使用Java Bean構(gòu)建對象wangxiaoer = new HashMap (); Object nullObject = null; wangxiaoer.put("name","王小二"); wangxiaoer.put("age",25.2); wangxiaoer.put("birthday","1990-01-01"); wangxiaoer.put("school","藍(lán)翔"); wangxiaoer.put("major",new String[]{"理發(fā)","挖掘機(jī)"}); wangxiaoer.put("has_girlfriend",false); // 使用nullObject跳過編譯器檢查 wangxiaoer.put("car",nullObject); wangxiaoer.put("house",nullObject); wangxiaoer.put("comment","這是一個注釋"); // 通過 JSONObject 的構(gòu)造函數(shù)接收一個 Map 生成 JSON System.out.println(new JSONObject(wangxiaoer).toString()); }
代碼演示:
1.構(gòu)建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 關(guān)鍵字,生成 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.編寫構(gòu)建代碼
/** * 通過 JavaBean 生成JSON【推薦使用】 */ public static void createJsonByBean(){ Diaosi wangxiaoer = new Diaosi(); wangxiaoer.setName("王小二"); wangxiaoer.setAge(25.2); wangxiaoer.setBirthday("1990-01-01"); wangxiaoer.setSchool("藍(lán)翔"); wangxiaoer.setMajor(new String[]{"理發(fā)","挖掘機(jī)"}); wangxiaoer.setHas_girlfriend(false); wangxiaoer.setCar(null); wangxiaoer.setHouse(null); wangxiaoer.setComment("這是一個注釋"); // 通過 JSONObject 的構(gòu)造函數(shù)接收一個 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.準(zhǔn)備JSON數(shù)據(jù)文件
{ "name" : "王小二", "age" : 25.2, "birthday" : "1990-01-01", "school" : "藍(lán)翔", "major" : ["理發(fā)","挖掘機(jī)"], "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 數(shù)據(jù)演示類 * Created by ChangComputer on 2017/5/21. */ public class ReadJsonSample { public static void main(String[] args) throws IOException { createJsonByFile(); } /** * 讀取 JSON 數(shù)據(jù) * */ 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("專業(yè)"+(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 總結(jié)
本章總結(jié)
講解了如何生成JSON格式數(shù)據(jù) 講解了如何解析JSONObject第四章:GSON的使用 4-1 GSON介紹
開源地址
https://github.com/google/gson
GSON優(yōu)點(diǎn)
功能更加強(qiáng)大 性能更加出色 使用方式更加便捷和簡單4-2 GSON生成JSON數(shù)據(jù)
代碼演示:
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 進(jìn)行 JSON 相關(guān)操作 * 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("藍(lán)翔"); wangxiaoer.setMajor(new String[]{"理發(fā)","挖掘機(jī)"}); wangxiaoer.setHas_girlfriend(false); wangxiaoer.setCar(null); wangxiaoer.setHouse(null); wangxiaoer.setComment("這是一個注釋"); wangxiaoer.setIgnore("不要看見我"); GsonBuilder gsonBuilder = new GsonBuilder(); // 設(shè)置格式化輸出 gsonBuilder.setPrettyPrinting(); // 自定義轉(zhuǎn)換策略 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數(shù)據(jù)
代碼演示:
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 進(jìn)行 JSON 相關(guān)操作 * 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("藍(lán)翔"); wangxiaoer.setMajor(new String[]{"理發(fā)","挖掘機(jī)"}); wangxiaoer.setHas_girlfriend(false); wangxiaoer.setCar(null); wangxiaoer.setHouse(null); wangxiaoer.setComment("這是一個注釋"); wangxiaoer.setIgnore("不要看見我"); GsonBuilder gsonBuilder = new GsonBuilder(); // 設(shè)置格式化輸出 gsonBuilder.setPrettyPrinting(); // 自定義轉(zhuǎn)換策略 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 數(shù)據(jù) * */ public static void createJsonByGsonFile() throws IOException { File file = new File(GsonReadSample.class.getResource("/wangxiaoer.json").getFile()); String content = FileUtils.readFileToString(file,"UTF-8"); // 無日期轉(zhuǎn)換 Gson gson = new Gson(); Diaosi wangxiaoer = gson.fromJson(content,Diaosi.class); System.out.println(wangxiaoer.toString()); // 帶日期轉(zhuǎn)換 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解析日期轉(zhuǎn)換
代碼演示:
// 帶日期轉(zhuǎn)換 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 Listmajor;
GSON會自動解析集合類字段
// 集合類解析 System.out.println(wangxiaoer2.getMajor()); System.out.println(wangxiaoer2.getMajor().getClass());4-7 總結(jié)
JSON和GSON
JSON是Android SDK官方的庫 GSON適用于服務(wù)端開發(fā) GSON比JSON功能更強(qiáng)大
JSON庫的特點(diǎn)
功能:映射Java Object與json格式數(shù)據(jù) 1.通過Annotation注解來聲明 2.支持自定義屬性名稱 3.支持包含或排序?qū)傩?4.支持自定義接口自己完成解析或生成過程
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/70091.html
摘要:時間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。整體目錄結(jié)構(gòu)如下項(xiàng)目文件用于數(shù)據(jù)持久化配置項(xiàng)目配置配置視圖解析器配置靜態(tài)資源映射配置配置配置自定義指令配置解析器配置,類似于項(xiàng)目啟動類新建,注冊配置類,并將其和當(dāng)前關(guān)聯(lián)。 時間:2017年3月19日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:無個人學(xué)習(xí)源碼:https://githu...
時間:2017年10月16日星期一說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程簡介 1-1 課程介紹 本門課程的主要內(nèi)容 RxJava是什么 RxAndroid是什么 RxJava常用操作符(重點(diǎn)、難點(diǎn)) 怎樣在項(xiàng)目中使用RxJava和RxAndroid 如何學(xué)...
摘要:小時學(xué)會學(xué)習(xí)總結(jié)時間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼暫無。數(shù)據(jù)庫操作下第六章事務(wù)管理事務(wù)管理只有查詢的時候不加事務(wù),其它任何操作都要加事務(wù)。第七章課程回顧課程回顧總結(jié)介紹安裝配置的使用數(shù)據(jù)庫操作 《2小時學(xué)會SpringBoot》學(xué)習(xí)總結(jié) 時間:2017年2月18日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示...
摘要:數(shù)據(jù)綁定入門學(xué)習(xí)總結(jié)時間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼個人學(xué)習(xí)源碼第一章課程介紹數(shù)據(jù)綁定入門概述數(shù)據(jù)綁定概念來自百度百科簡單綁定是將一個用戶界面元素控件的屬性綁定到一個類型對象實(shí)例上的某個屬性的方法。 《SpringMVC數(shù)據(jù)綁定入門》學(xué)習(xí)總結(jié) 時間:2017年2月19日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.co...
摘要:入門篇學(xué)習(xí)總結(jié)時間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。主要的功能是日志記錄,性能統(tǒng)計,安全控制,事務(wù)處理,異常處理等等。 《Spring入門篇》學(xué)習(xí)總結(jié) 時間:2017年1月18日星期三說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個人學(xué)習(xí)源碼:https://git...
閱讀 1459·2021-09-30 09:57
閱讀 1466·2021-09-09 09:33
閱讀 2219·2021-09-04 16:40
閱讀 1792·2021-09-01 10:50
閱讀 3234·2021-09-01 10:31
閱讀 2539·2019-08-30 15:56
閱讀 2969·2019-08-30 15:44
閱讀 3474·2019-08-29 17:29