Java解析使用JSON的多種方法
XML的特點是功能全面,但標簽繁瑣,格式復雜。在Web上使用XML現(xiàn)在越來越少,取而代之的是JSON這種數(shù)據(jù)結(jié)構(gòu)。JSON是JavaScript Object Notation的縮寫,它去除了所有JavaScript執(zhí)行代碼,只保留JavaScript的對象格式。
開發(fā)Web應用的時候,使用JSON作為數(shù)據(jù)傳輸,在瀏覽器端非常方便。因為JSON天生適合JavaScript處理,所以,絕大多數(shù)REST API都選擇JSON作為數(shù)據(jù)傳輸格式?,F(xiàn)在問題來了:使用Java如何對JSON進行讀寫?
JSON優(yōu)缺點介紹
JSON是一種輕量級的數(shù)據(jù)交換格式,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言。 易于閱讀和編寫,同時也易于解析和生成,可以在多種語言之間進行數(shù)據(jù)交換,并有效地提升網(wǎng)絡傳輸效率,同時也易于機器解析和生成。它是基于ECMAScript的一個子集。JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣。
優(yōu)點:
1、數(shù)據(jù)格式比較簡單,易于編程人員閱讀和編寫,同時也易于計算機生成和解析。
2、支持多種語言,包括ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby等語言服務器端語言,便于服務器端的解析。
3、因為JSON格式能夠直接被服務器端代碼使用,大大簡化了服務器端和客戶端的代碼開發(fā)量,但是完成的任務不變,且易于維護。
缺點:
1、語法嚴謹,必須符合JSON語法規(guī)則。
2、要求字符集必須是Unicode,約束性強。
類庫選擇
在Java中,并沒有內(nèi)置JSON的解析,針對JSON也有標準的JSR 353 API,但是我們在前面講XML的時候發(fā)現(xiàn),如果能直接在XML和JavaBean之間互相轉(zhuǎn)換是最好的。類似的,如果能直接在JSON和JavaBean之間轉(zhuǎn)換,那么用起來就簡單多了。
因此使用JSON需要借助第三方類庫。下面是幾個常用的 JSON 解析類庫:
類型 | 特點 |
傳統(tǒng)JSON方式 | 復雜的Json數(shù)據(jù)轉(zhuǎn)換成實體類存在缺陷,性能和功能不夠完善 |
Jackson方式 | 復雜的Json數(shù)據(jù)轉(zhuǎn)換成實體類存在缺陷,性能和功能優(yōu)于傳統(tǒng)方式 |
Gson方式 | 功能方面在幾種方式中最優(yōu),性能方面不如Jackson方式 |
FastJson方式 | 復雜的實體類轉(zhuǎn)換成Json數(shù)據(jù)存在缺陷,解析json的速度優(yōu)于其他方式 |
FastJson教程講解
環(huán)境配置
在 Maven 構(gòu)建的項目中,在 pom.xml 文件中加入以下依賴即可。
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
編碼
從 Java 變量到 JSON 格式的編碼過程如下:
實例
public void testJson() { JSONObject object = new JSONObject(); //string object.put("string","string"); //int object.put("int",2); //boolean object.put("boolean",true); //array List<Integer> integers = Arrays.asList(1,2,3); object.put("list",integers); //null object.put("null",null); ? System.out.println(object); }
在上例中,首先建立一個 JSON 對象,然后依次添加字符串、整數(shù)、布爾值以及數(shù)組,最后將其打印為字符串。
輸出結(jié)果如下:
{"boolean":true,"string":"string","list":[1,2,3],"int":2}
解碼
從 JSON 對象到 Java 變量的解碼過程如下:
實例
public void testJson2() { ? JSONObject object = JSONObject .parseObject("{\"boolean\":true,\"string\":\"string\",\"list\":[1,2,3],\"int\":2}"); //string String s = object.getString("string"); System.out.println(s); //int int i = object.getIntValue("int"); System.out.println(i); //boolean boolean b = object.getBooleanValue("boolean"); System.out.println(b); //list List<Integer> integers = JSON.parseArray(object.getJSONArray("list").toJSONString(),Integer.class); integers.forEach(System.out::println); //null System.out.println(object.getString("null")); ? }
在上例中,首先從 JSON 格式的字符串中構(gòu)造一個 JSON 對象,之后依次讀取字符串、整數(shù)、布爾值以及數(shù)組,最后分別打印,打印結(jié)果如下:
string 2 true 1 2 3 null
JSON 對象與字符串的相互轉(zhuǎn)化
方法 | 作用 |
---|---|
JSON.parseObject() | 從字符串解析 JSON 對象 |
JSON.parseArray() | 從字符串解析 JSON 數(shù)組 |
JSON.toJSONString(obj/array) | 將 JSON 對象或 JSON 數(shù)組轉(zhuǎn)化為字符串 |
實例
//從字符串解析JSON對象 JSONObject obj = JSON.parseObject("{\"jb51\":\"腳本之家\"}"); //從字符串解析JSON數(shù)組 JSONArray arr = JSON.parseArray("[\"腳本之家\",\"JB51\"]\n"); //將JSON對象轉(zhuǎn)化為字符串 String objStr = JSON.toJSONString(obj); //將JSON數(shù)組轉(zhuǎn)化為字符串 String arrStr = JSON.toJSONString(arr);
到此這篇關(guān)于Java解析使用JSON的多種方法的文章就介紹到這了,更多相關(guān)Java解析JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot Application事件監(jiān)聽的實現(xiàn)方案
這篇文章主要介紹了SpringBoot Application事件監(jiān)聽的實現(xiàn)方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-05-05Spring MVC入門_動力節(jié)點Java學院整理
這篇文章主要介紹了Spring MVC入門,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08Java實現(xiàn)獲取控制臺輸出結(jié)果轉(zhuǎn)換為變量的詳細操作
在Java編程中,有時需將控制臺的輸出捕獲為字符串,以便于后續(xù)的處理或測試,這種需求在日志記錄、單元測試或調(diào)試時尤為常見,下面,將通過詳細步驟來介紹如何使用ByteArrayOutputStream和PrintStream來實現(xiàn)這一功能,需要的朋友可以參考下2024-06-06