欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳細JSON解析教程

 更新時間:2023年08月08日 11:07:58   作者:周里奧  
JSON即JS對象簡譜 , 是一種輕量級的數(shù)據(jù)交換格式,Java官方?jīng)]有提供JSON解析相應(yīng)的API,本文提供兩個最常用的JSON解析方法,分別是Google的Gson,阿里的FastJson,使用JSON解析之前要先獲取相應(yīng)的jar包,感興趣的朋友一起看看吧

1. 了解JSON

簡介:JSON(JavaScript Object Notation),即JS對象簡譜 , 是一種輕量級的數(shù)據(jù)交換格式。

進一步理解:

  • JSON和JavaScript的關(guān)系:兩者之間的關(guān)系就是雷鋒和雷鋒塔的關(guān)系,兩者之間沒有什么關(guān)系;
  • 數(shù)據(jù)交換格式:實現(xiàn)客戶端與服務(wù)器之間的數(shù)據(jù)交換,當時通用的數(shù)據(jù)交換語言是XML,但是Douglas crockford覺得xml的生成和解析都太麻煩,所以他提出了一種簡化格式,也就是json;(更具體見4.JSON解析)
  • 輕量級是對比而言的,JSON 簡單的語法格式和清晰的層次結(jié)構(gòu)明顯要比 XML 容易閱讀,并且在數(shù)據(jù)交換方面,由于 JSON 所使用的字符要比 XML 少得多,可以大大得節(jié)約傳輸數(shù)據(jù)所占用得帶寬。

2.JSON對象格式

試著用不同的語言描述一本書(對象):書名+內(nèi)容,能夠看出JSON在輕量級這塊的優(yōu)勢

Java

Public class Test {
	public static void main() {
		Book b = new Book();
		b.setName(“金蘋果”); 
		b.setInfo(“種蘋果好辛苦”);
	}
}
class Book {
	private String name;
	private String info;
	構(gòu)造方法;
	get/set方法...
}

JavaScript

var b = new Object();
	b.name = "金蘋果"; 
	b.info = "種蘋果好辛苦";

XML

<book>
	<name>金蘋果</name>
	<info>種蘋果好辛苦</info> 
</book>

JSON

{ 
	"name":"金蘋果",
 	"info":"種蘋果好辛苦" 
}

3.JSON語法格式(建議結(jié)合案例對比著看)

  • 一個對象由一個大括號表示,大括號中通過鍵值對來描述對象的屬性 (可以理解為,大括號中,包含的是一個個的鍵值對);
  • 鍵與值之間使用冒號連接,多個鍵值對之間使用逗號分隔;
  • 鍵值對的鍵應(yīng)使用引號引住 (通常Java解析時,鍵不使用引號會報錯。而JS能正確解析);
  • 鍵值對的值, 可以是JS中的任意類型的數(shù)據(jù);
  • 數(shù)組格式:[元素1,元素2…];
  • 在JSON格式中可以互相嵌套,比如對象1里出現(xiàn)數(shù)組1,數(shù)組1里又出現(xiàn)對象2。

案例

{
	"name":"種水果",
	"info":"種水果好辛苦",
	"fruit":["蘋果","香蕉",{
				"name":"西瓜",
				"info":"無籽西瓜"
			}],
	"haha":{
		"name":"大長刀",
		"length":"40cm"
	}
}

4.JSON解析

Java用JSON做什么?上面也說過了,用來實現(xiàn)數(shù)據(jù)交換。我們知道JSON存的數(shù)據(jù)類型是字符串,并且這個字符串由一個個鍵值對組成,像極了Java對象里屬性和值的關(guān)系。我們想能不能通過某種辦法把JSON字符串變成Java相應(yīng)的對象、實現(xiàn)對數(shù)據(jù)方便地操作呢?或者我們想把Java對象的信息變成JSON字符串展示給別人看呢?下面引入JSON解析的概念。

  • 序列化:將Java中的對象快速的轉(zhuǎn)換為 JSON格式的字符串。
  • 反序列化:將JSON格式的字符串, 轉(zhuǎn)換為Java的對象。

Java官方?jīng)]有提供JSON解析相應(yīng)的API,本文提供兩個最常用的JSON解析方法,分別是Google的Gson,阿里的FastJson,使用JSON解析之前要先獲取相應(yīng)的jar包。

Gson解析

  • 將對象轉(zhuǎn)換為JSON字符串,步驟:

引入jar包

在需要轉(zhuǎn)換JSON字符串的位置編寫如下代碼即可: String json = new Gson().toJSON(要轉(zhuǎn)換的對象);

案例

Book b = new Book("金蘋果","講述了種植蘋果的心酸歷程",20,100);	
	String json = new Gson().toJson(b);
	System.out.println(json);

輸出結(jié)果

{"name":"金蘋果","info":"講述了種植蘋果的心酸歷程","prize":20,"page":100}

將JSON字符串轉(zhuǎn)換為對象,步驟:

1.引入jar包

2.在需要轉(zhuǎn)換Java對象的位置, 編寫如下代碼: 類型 對象 = new Gson().fromJson(JSON字符串,對象類型.class);

案例1

String json1 = "{\"name\":\"金蘋果\",\"info\":\"講述了種植蘋果的心酸歷程\",\"prize\":10,\"page\":100}";
	Book b1 = new Gson().fromJson(json,Book.class);
	System.out.println(b1.getPrize());

輸出結(jié)果

    10

案例2

注意:字符串最外層有花括號’{}’,英文引號前有轉(zhuǎn)義字符\

//		如果字符串信息和對象信息不匹配 ,則字符串轉(zhuǎn)hashmap對象,因為hashmap類型也是按鍵值對存儲。
	String json2 = "{\"name\":\"金蘋果\",\"info\":\"講述了種植蘋果的心酸歷程\",\"prize\":20,\"page\":100,\"content\":[\"鋤禾日當午\",\"汗滴禾下土\",\"呵呵呵呵呵\"]}";
	HashMap map = new Gson().fromJson(json2,HashMap.class);
	System.out.println(map.get("content"));
	//		這里說明一下,如果字符串里有數(shù)組,轉(zhuǎn)HashMap后,數(shù)組按List存儲(動手試一下)
	ArrayList list = (ArrayList) map.get("content");
	System.out.println(list.get(0));

輸出結(jié)果

    [鋤禾日當午,汗滴禾下土,呵呵呵呵呵]
    鋤禾日當午

FastJson解析

  • 將對象轉(zhuǎn)換為JSON字符串,步驟:

引入jar包

在需要轉(zhuǎn)換JSON字符串的位置編寫如下代碼即可: String json=JSON.toJSONString(要轉(zhuǎn)換的對象);

案例

Book b = new Book("金蘋果","講述了種植蘋果的心酸歷程",20,100);
	String fastJson = JSON.toJSONString(b);
	System.out.println(fastJson);

輸出結(jié)果

{"info":"講述了種植蘋果的心酸歷程","name":"金蘋果","page":100,"prize":20}

將JSON字符串轉(zhuǎn)換為對象,步驟:

引入jar包

在需要轉(zhuǎn)換Java對象的位置, 編寫如下代碼: 類型 對象名=JSON.parseObject(JSON字符串, 類型.class); 或 List<類型> list=JSON.parseArray(JSON字符串,類型.class);

案例1

Book b1 = JSON.parseObject("{\"name\":\"金蘋果\",\"info\":\"講述了種植蘋果的心酸歷程\",\"prize\":20,\"page\":100}",Book.class);
	System.out.println(b1);

運行結(jié)果

    Book{name='金蘋果', info='講述了種植蘋果的心酸歷程', prize=20, page=100}

案例2:數(shù)組轉(zhuǎn)為list集合

List<String> list = JSON.parseArray("[\"鋤禾日當午\",\"汗滴禾下土\",\"呵呵呵呵呵\"]",String.class);
	System.out.println(list.get(1));

運行結(jié)果

    汗滴禾下土

案例3:解析一段稍微復(fù)雜的JSON案例

{
	"name":"種水果",
	"info":"種水果好辛苦",
	"fruit":["蘋果","香蕉",{
				"name":"西瓜",
				"info":"無籽西瓜"
			}],
	"haha":{
		"name":"大長刀",
		"length":"40cm"
	}
}

代碼

String json = "[{
						"name":"種水果",
						"info":"種水果好辛苦",
						"fruit":["蘋果","香蕉",{
										"name":"西瓜",
										"info":"無籽西瓜"
								}],
						"haha":{
						"name":"大長刀",
						"length":"40cm"
						}
					}]";
	//1.	最外層是數(shù)組格式,這里數(shù)組只包含一個元素
	List<Map> list = JSON.parseArray(json,Map.class);
    Map map = list.get(0);
    String info = (String) map.get("info");
    System.out.println(info);   //種水果好辛苦
    //2.	鍵fruit對應(yīng)的值類型是數(shù)組,用到方法toJSONString()將數(shù)組轉(zhuǎn)成字符串格式,再進行解析
    String fruit = JSON.toJSONString(map.get("fruit"));
    List<String> list1 = JSON.parseArray(fruit,String.class);
    System.out.println(list1.get(0));   //蘋果
    //      字符串轉(zhuǎn)對象
    Map map1 = JSON.parseObject(list1.get(2),Map.class);
    System.out.println(map1.get("info"));   //無籽西瓜

運行結(jié)果

的的的的

總結(jié)

  • JSON解析無非就兩種情況:序列化和反序列化,序列化簡單一些,反序列化注意一下對象的類型;
  • 最外層對這里的字符串加了"[]",初試為數(shù)組;
  • toJSONString()方法,實現(xiàn)數(shù)組向字符串的轉(zhuǎn)化;
  • 建議動手敲一下代碼,體會更深一些。

參考資料

1.JSON基本使用

2.FastJson的簡單使用

到此這篇關(guān)于詳細Java JSON解析教程的文章就介紹到這了,更多相關(guān)json解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • DeepSeek?Window本地私有化部署教程

    DeepSeek?Window本地私有化部署教程

    本文介紹了如何在Windows電腦上本地部署DeepSeekR1大模型,包括安裝Ollama工具、下載DeepSeekR1模型、安裝圖形化交互界面CherryStudio等步驟,部署過程中強調(diào)了隱私安全和響應(yīng)速度快的優(yōu)勢
    2025-02-02
  • 關(guān)于Git遠程與本地沖突的解決方法

    關(guān)于Git遠程與本地沖突的解決方法

    這篇文章主要給大家介紹了關(guān)于Git遠程與本地沖突的解決方法,文中給出了詳細的解決方法,相信對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。
    2017-04-04
  • WebStorm打開多個項目的三種方法總結(jié)

    WebStorm打開多個項目的三種方法總結(jié)

    WebStorm支持多項目管理,本文介紹了三種方法:使用項目導(dǎo)航面板、窗口分割和多個WebStorm實例,項目導(dǎo)航面板可以在同一窗口內(nèi)管理多個項目,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • mathtype的下載與使用技巧超詳細教程

    mathtype的下載與使用技巧超詳細教程

    這篇文章主要介紹了mathtype的下載與使用超詳細教程,包括mathtype使用技巧常用快捷鍵,本文給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • 趁熱打鐵!HTTPGet與HTTPPost的區(qū)別詳解

    趁熱打鐵!HTTPGet與HTTPPost的區(qū)別詳解

    這篇文章主要介紹了趁熱打鐵!HTTPGet與HTTPPost的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 漢明碼編碼原理及校驗方法分析

    漢明碼編碼原理及校驗方法分析

    漢明碼在傳輸?shù)南⒘髦胁迦腧炞C碼,當計算機存儲或移動數(shù)據(jù)時,可能會產(chǎn)生數(shù)據(jù)位錯誤,以偵測并更正單一比特錯誤。由于漢明編碼簡單,它們被廣泛應(yīng)用于內(nèi)存RAM
    2021-09-09
  • SVN與Git版本控制的優(yōu)缺點差異全面分析

    SVN與Git版本控制的優(yōu)缺點差異全面分析

    這篇文章主要為大家介紹了SVN與Git版本控制的優(yōu)缺點差異全面分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • selenium IDE自動化測試腳本的實現(xiàn)

    selenium IDE自動化測試腳本的實現(xiàn)

    本文主要介紹了selenium IDE自動化測試腳本的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • github pull最新代碼實現(xiàn)方法

    github pull最新代碼實現(xiàn)方法

    本文主要介紹 github pull最新代碼的資料,這里對 github pull最新代碼做了詳細流程介紹,有需要的小伙伴可以參考下
    2016-09-09
  • 從學習到接單賺錢 十大網(wǎng)絡(luò)技術(shù)人員推薦收藏的網(wǎng)站

    從學習到接單賺錢 十大網(wǎng)絡(luò)技術(shù)人員推薦收藏的網(wǎng)站

    這篇文章主要介紹了從學習到接單賺錢 十大網(wǎng)絡(luò)技術(shù)人員推薦收藏的網(wǎng)站,需要的朋友可以參考下
    2015-08-08

最新評論