【JSON快速入门】使得XML被人们淘汰的技术,你还不知道?
前言
首先大家要知道JSON是一種輕量級的數據交換格式,類似與之前的XML,那么我們學習過了XML了為什么還要學習JSON呢?是因為JSON太過于火熱使得XML被人淘汰了哈哈哈。
往期好文推薦: 【EL與JSTL表達式】學習JSP之后,這是你不得不知道的技術
直接使得XML被淘汰了,那么這個JSON的重要性不言而喻了,我們正式開始學習!
目錄
- 前言
- 初識JSON
- JSON語法規則
- 創建JSON文件
- JSON與Java Script交互
- Java Script訪問JSON
- JS中將字符串轉換為JSON
- JS中將JSON對象轉化為字符串
- JSON與Java交互
- 環境準備
- FastJSON對象序列化與反序列化
- FastJSON對象數組序列化與反序列化
- 結語
初識JSON
JSON:全稱為JavaScript Object Notation(JavaScript 對象表示法),是輕量級的文本數據交換格式。
JSON 是存儲和交換文本信息的語法,類似 XML。
JSON 比 XML 更小、更快,更易解析。這也是JSON能取代XML的原因之一。
JSON語法規則
JSON是一種格式,那么它的核心就是它自己的語法規則了。
JSON語法格式:
(1)數據由鍵(key)/值(value)描述,由逗號分隔。
(2)大括號代表一個完整對象,可擁有多個鍵值對。
(3)中括號保存數組,多個對象之間使用逗號分隔。
如下就是一個使用JSON語法構成的數據:
{"sites":[{"name" : "CSDN", "url" : "www.csdn.com"},{"name" : "百度", "url" : "www.baidu.com"}] }創建JSON文件
我們創建一個JSON也是非常簡單的,直接右擊項目的源碼目錄,選擇創建File(文件)即可,最后把后綴名改為.json即可。
之后進行編寫即可如下:
寫完之后可能有點長,我們給他進行格式化:
右擊當前頁面找到Source,然后在Source中找到Format點擊即可。
就會發現頁面格式變為:
除此之外我們還可以按快捷鍵來進行格式化:Ctrl + Shift + F
JSON與Java Script交互
之前就說過了JSON的全稱為JavaScript Object Notation(JavaScript 對象表示法),這里有JavaScript,其實最早開始JSON就是專門為JavaScript來提供服務的,但是后來太好用了所以就慢慢對所有語言都可用了。
這里得說一下JSON是獨立于語言的。
JSON 獨立于語言:JSON 使用 Javascript語法來描述數據對象,但是 JSON 仍然獨立于語言和平臺。JSON 解析器和 JSON 庫支持許多不同的編程語言。 目前非常多的動態(PHP,JSP,.NET)編程語言都支持JSON。
Java Script訪問JSON
那么我們該如何使用JavaScript來訪問JSON呢?
因為JSON是使用Javascript語法來描述數據對象的,所以JSON 文本格式在語法上與創建 JavaScript 對象的代碼相同。
所以JavaScript 程序能夠使用內建的 eval() 函數,用 JSON 數據來生成原生的 JavaScript 對象。
接下來我們直接在HTML頁面里,寫一個JavaScript 代碼塊,在JavaScript 代碼塊里面來創建JSON數據對象,并對其進行輸出。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript">var json = [{"empno": 7369,"ename": "小明","job": "軟件工程師","hiredate": "2017-04-12","salary": 13000,"dname": "研發部"},{"empno": 7499,"ename": "王樂","job": "算法工程師","hiredate": "2017-05-12","salary": 19000,"dname": "研發部","customers": [{"cname": "秋冬"},{"cname": "大力"}]}];//在瀏覽器控制臺對json內容進行輸出console.log(json);//在瀏覽器頁面進行輸出for(var i = 0; i < json.length; i ++) {var emp = json[i];document.write("<h1>")document.write(emp.empno);document.write("," + emp.ename);document.write("," + emp.job);document.write("," + emp.salary);document.write("," + emp.dname);document.write("</h1>") //因為customers屬性不是公有的,所以要先判斷在進行輸出if(emp.customers != null) {document.write("<h2>--")for(var j = 0; j < emp.customers.length; j++) {document.write(emp.customers[j].cname + ",");}document.write("</h2>")}} </script> </head> <body></body> </html>我們在代碼中分別先創建了JSON數據對象,然后對其內容分別在瀏覽器控制臺與頁面進行輸出。接下來我們看一看輸出效果。
JS中將字符串轉換為JSON
在實際應用場景中我們會經常需要進行把字符串轉化為JSON格式的數據或者是把JSON轉化為字符串進行保存。
我們先來看將字符串轉化為JSON。
使用JSON.parse()方法將字符串轉換為JSON對象
其實就是這么簡單的,我們繼續寫一個案例進行演示。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>字符串轉JSON</title> <script type="text/javascript"> //原始字符串不能寫錯,需要與標準JSON格式相同才能進行轉換var str = "{\"class_name\":\"五年級二班\"}";var json = JSON.parse(str);console.log(json);console.log(str);document.write(json.class_name); </script> </head> <body></body> </html>在瀏覽器頁面中的輸出:
但是這里要注意,不是所有的字符串都能轉化為JOSN對象的,這里的字符串要求是格式是JSON格式的字符串,要符合JSON語法的。
JS中將JSON對象轉化為字符串
使用JSON.stringify()方法將JSON對象轉換為字符串
其實就是這么簡單的,我們繼續寫一個案例進行演示。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JSON轉字符串</title> <script type="text/javascript">var json = {"class_name" : "三年級五班"};var str = JSON.stringify(json);console.info(json);console.info(str); </script> </head> <body></body> </html>在瀏覽器進行輸出
在JS中創建JSON對象
其實我們在js中創建JSON對象還可以這樣:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JSON轉字符串</title> <script type="text/javascript">//創建json的新方式,當作對象一樣!var json1 = {}json1.class_name = "六年級八班";json1.teacher = "大力";console.info(json1); </script> </head> <body></body> </html>輸出:
JSON與Java交互
之前提到了JSON是脫離與語言的,我們Java也能與JSON進行交互。接下來就來看看它們是怎么要進行交互的。
環境準備
Java中并沒有內置JSON的解析,因此使用JSON需要借助第三方類庫。
下面是幾個常用的 JSON 解析類庫:
(1)Gson: 谷歌開發的 JSON 庫,功能十分全面
(2)FastJson: 阿里巴巴開發的 JSON 庫,性能十分優秀。
(3) Jackson:社區十分活躍且更新速度很快。
我們這里選用國產的JSON解析庫FastJson。
我們首先安裝FastJson解析庫,在網上下載FastJson的jar包之后我們只需要把他復制到Web應用的WEB-INF目錄底下的lib目錄中去,就可以使用了。
FastJSON對象序列化與反序列化
序列化與反序列化其實就是,Java對象與JSON對象之間的轉換.
(1)使用JSON.toJSONString(Java對象)將Java對象轉化為JSON字符串。
(2)使用 JSON.parseObject(JSON對象,要轉化為的Java類)將JSON對象轉化為Java對象。
代碼演示:
我們先創建一個Java類用來創建原始數據。
public class Employee {private Integer empno;private String ename;private String job;private Date hdate;private Float salary;private String dname;public Employee() {}public Employee(Integer empno, String ename, String job, Float salary, String dname) {super();this.empno = empno;this.ename = ename;this.job = job;this.salary = salary;this.dname = dname;}public Integer getEmpno() {return empno;}public void setEmpno(Integer empno) {this.empno = empno;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}public Date getHdate() {return hdate;}public void setHdate(Date hdate) {this.hdate = hdate;}public Float getSalary() {return salary;}public void setSalary(Float salary) {this.salary = salary;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;} }然后創建Java類對象進行轉化:
public class FastJsonSample1 {public static void main(String[] arge) {Employee employee;employee = new Employee(1101, "大力", "經理", 10000f, "市場部");Calendar c = Calendar.getInstance();c.set(2019,0,30,0,0,0);employee.setHdate(c.getTime());//FastJSON中提供了JSON對象,完成對象與JSON字符串的相互轉換String json = JSON.toJSONString(employee);System.out.println(json);//JSON對象轉換為Java類對象Employee emp = JSON.parseObject(json,Employee.class);System.out.println(emp.getEname());} }輸出:
我們可以看到轉化輸出都非常成功但是這個日期與我們設置的并不相同。
其實這里的日期默認為時間戳-從1970到設置日期的毫秒數,我們可以使用注解來解決這個問題。
我們在創建類的日期屬性上面增加注解設置格式:
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
再來看輸出:
正常輸出了。
FastJSON對象數組序列化與反序列化
剛才是單個 FastJSON對象序列化與反序列化,但是在平時的真實應用場景中,往往是很多的JSON對象與Java對象之間進行轉換,或者是很多的Java對象與JSON對象進行轉化的。
那么我們又該如何讓進行轉化呢?
(1)依然使用JSON.toJSONString(Java對象)將Java對象轉化為JSON字符串。
(2)使用 JSON.parseArray(JSON對象,要轉化為的Java類)將JSON對象轉化為Java對象。
代碼演示:
public class FastJsonSample2 {public static void main(String[] arge) {List emplist = new ArrayList();//使用循環創建對象組for(int i = 0; i < 50; i ++) {Employee employee = new Employee();employee.setEmpno(1012 + i);employee.setEname("員工" + i);emplist.add(employee);}//可以把數組,集合,List轉換為JSON數組String json = JSON.toJSONString(emplist);System.out.println(json);//反序列化,將JSON轉換為Java對象List<Employee> emps = JSON.parseArray(json, Employee.class);for(Employee e : emps) {System.out.println(e.getEname() + ":" + e.getEmpno());}} }輸出:
結語
JSON代替了XML,成為了當下使用最廣泛的一門技術之一。我們應該對其在學習階段好好練習掌握,以便在工作中熟練運用。
本專欄持續更新中…
總結
以上是生活随笔為你收集整理的【JSON快速入门】使得XML被人们淘汰的技术,你还不知道?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数仓用户画像-标签体系详解
- 下一篇: 百度云资源下载链接获取