最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳細(xì)JSON解析教程

 更新時(shí)間: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ù)交換格式。

進(jìn)一步理解:

  • JSON和JavaScript的關(guān)系:兩者之間的關(guān)系就是雷鋒和雷鋒塔的關(guān)系,兩者之間沒有什么關(guān)系;
  • 數(shù)據(jù)交換格式:實(shí)現(xiàn)客戶端與服務(wù)器之間的數(shù)據(jù)交換,當(dāng)時(shí)通用的數(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解析時(shí),鍵不使用引號會報(bào)錯。而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做什么?上面也說過了,用來實(shí)現(xiàn)數(shù)據(jù)交換。我們知道JSON存的數(shù)據(jù)類型是字符串,并且這個字符串由一個個鍵值對組成,像極了Java對象里屬性和值的關(guān)系。我們想能不能通過某種辦法把JSON字符串變成Java相應(yīng)的對象、實(shí)現(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對象,因?yàn)閔ashmap類型也是按鍵值對存儲。
	String json2 = "{\"name\":\"金蘋果\",\"info\":\"講述了種植蘋果的心酸歷程\",\"prize\":20,\"page\":100,\"content\":[\"鋤禾日當(dāng)午\",\"汗滴禾下土\",\"呵呵呵呵呵\"]}";
	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é)果

    [鋤禾日當(dāng)午,汗滴禾下土,呵呵呵呵呵]
    鋤禾日當(dāng)午

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);

運(yùn)行結(jié)果

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

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

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

運(yùn)行結(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)成字符串格式,再進(jì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"));   //無籽西瓜

運(yùn)行結(jié)果

的的的的

總結(jié)

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

參考資料

1.JSON基本使用

2.FastJson的簡單使用

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

相關(guān)文章

  • 一文助你搞懂參數(shù)傳遞原理解析(java、go、python、c++)

    一文助你搞懂參數(shù)傳遞原理解析(java、go、python、c++)

    這篇文章主要介紹了多種語言參數(shù)傳遞原理解析(java、go、python、c++),本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 微信支付、支付寶支付等常用第三方支付通道接口手續(xù)費(fèi)對比

    微信支付、支付寶支付等常用第三方支付通道接口手續(xù)費(fèi)對比

    微信支付、支付寶等第三方支付,需要和銀聯(lián)、網(wǎng)聯(lián)對接,有清算機(jī)構(gòu)和銀行的交易處理通道成本。費(fèi)率指支付手續(xù)費(fèi)的費(fèi)率,不同行業(yè)、不同的支付平臺、不同的支付額度或次數(shù)所對應(yīng)的通道費(fèi)率是不一樣的。
    2023-01-01
  • VScode中配置使用fortran的方法

    VScode中配置使用fortran的方法

    這篇文章主要介紹了VScode中配置使用fortran的方法,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • 持續(xù)集成工具之Jenkins安裝部署的詳細(xì)教程

    持續(xù)集成工具之Jenkins安裝部署的詳細(xì)教程

    這篇文章主要介紹了持續(xù)集成工具之Jenkins安裝部署,本文通過圖文的形式給大家啊介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • so easy!10行代碼寫個

    so easy!10行代碼寫個"狗屁不通"文章生成器功能

    這篇文章主要介紹了通過10行代碼寫個"狗屁不通"文章生成器功能,真的超級簡單,感興趣的朋友跟隨腳本之家小編一起看看吧
    2020-01-01
  • 科學(xué)知識:理解socket

    科學(xué)知識:理解socket

    這篇文章主要介紹了科學(xué)知識:理解socket,本文試圖用簡潔的語言說清楚socket的相關(guān)知識,以便理解,需要的朋友可以參考下
    2015-05-05
  • 從學(xué)習(xí)到接單賺錢 十大網(wǎng)絡(luò)技術(shù)人員推薦收藏的網(wǎng)站

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

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

    WebStorm安裝配置教程

    WebStorm 是jetbrains公司旗下一款JavaScript開發(fā)工具,這篇文章主要為大家詳細(xì)介紹了WebStorm安裝教程,文中安裝步驟非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 最新Listary?v5.00.2843注冊碼?親測可用

    最新Listary?v5.00.2843注冊碼?親測可用

    listary是?windows?下一款可以快速搜索所有程序、文件,并且可以快速啟動程序和打開相應(yīng)文件的優(yōu)秀的搜索軟件,絕對比系統(tǒng)自帶搜索速度快很多,而且查詢功能豐富,本文給大家分享Listary?v5.00.2843注冊碼,感興趣的朋友一起看看吧
    2022-07-07
  • 互聯(lián)網(wǎng)科技大佬推薦的12本必讀書籍

    互聯(lián)網(wǎng)科技大佬推薦的12本必讀書籍

    12本互聯(lián)網(wǎng)科技大佬推薦的必讀書籍,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評論

彭泽县| 枣强县| 民县| 疏附县| 嘉义市| 元江| 什邡市| 莱阳市| 星座| 潍坊市| 清涧县| 昔阳县| 登封市| 太保市| 鄂尔多斯市| 河西区| 滨州市| 广安市| 鹰潭市| 张家界市| 漠河县| 湖口县| 尉氏县| 鹤壁市| 焦作市| 临湘市| 丰城市| 蓝山县| 浠水县| 兖州市| 大足县| 甘泉县| 囊谦县| 双流县| 肇源县| 大同县| 凤翔县| 丽江市| 大邑县| 广丰县| 重庆市|