12.19 程序員:JSON、JSONObject 與 JSONArray 簡單講解


程序員:JSON、JSONObject 與 JSONArray 簡單講解

fastjson簡介

fastjson 是阿里巴巴的開源JSON解析庫,它可以解析 JSON 格式的字符串,支持將 Java Bean 序列化為 JSON 字符串,也可以從 JSON 字符串反序列化到 JavaBean。比較牛的是下面這句話

fastjson 相對其他 JSON 庫的特點是快,從 2011 年 fastjson 發佈1.1.x版本之後,其性能從未被其他 Java 實現的 JSON 庫超越

附上其 maven 庫座標

<dependency>

<groupid>com.alibaba/<groupid>

<artifactid>fastjson/<artifactid>

<version>1.2.61/<version>

什麼是 JSON

在最開始接觸 JSON 的時候,不太明白 JSON 的概念,感覺很籠統

其實 JSON 就是一種輕量級的數據交換格式,被廣泛應用於 WEB 應用程序開發

1.1 JSON 的優勢

JSON 的簡潔 和 清晰的層次結構

易於人閱讀和編寫,同時也易於機器解析和生成

有效的提升網絡傳輸效率

支持多種語言,很多流行的語言都對 JSON 格式有著很友好的支持

1.2 JSON 對象

這就是一個平常使用的 JSON 對象,特徵就是多個屬性是被 {} 括起來的

{

"area": "山東菏澤",

"name": "馬馬馬馬馬百萬",

"age": 25

}

JSON 數組

JSON 數組其實就是包含了多個 JSON 對象的一個集合,數組是以 數組括號 [] 括起來的

[{

"area": "廣東",

"name": "山溪",

"age": 25

}, {

"area": "沙西",

"name": "馬希泰",

"age": 26

}]

JSON 數組並一定是要相同的 JSON 對象的集合,也可以是不同的對象,不過我在開發過程中並沒有這麼使用過,感覺挺彆扭的。因為如果將多個對象放進一個 JSONArray 中的話,下意識認為是相同類型的集合

下面這種類型也是正確的 JSON 數組格式

[{

"area": "江蘇",

"name": "徐州",

"age": 25

}, {

"drugCode": "HXUDP000000000000MED0000342809",

"dosformName": "注射",

"drugName": "打點滴"

}]

JSON、JSON對象、JSON數組區別

JSON 呢只是一種宏觀上的叫法,可以理解為是一種數據結構,就像 xml 結構一樣,是一種規約性內容;而 JSON 對象則是對 JSON 的具體體現;JSON 數組則是將多個 JSON 對象進行存儲的一個集合,可以想象成 Java 中的 List 和 Object 的關係

什麼是 JSONObject

JSONObject 是根據 JSON 形式在 Java 中存在的對象映射

各大 JSON 類庫的 JSONObject 內部實現也是不太一樣的。這裡以 fastjson 舉例

public class JSONObject extends JSON implements Map<string>, Cloneable, Serializable, InvocationHandler {/<string>

private static final long serialVersionUID = 1L;

private static final int DEFAULT_INITIAL_CAPACITY = 16;

private final Map<string> map;/<string>

public JSONObject(){

this(DEFAULT_INITIAL_CAPACITY, false);

}

public JSONObject(Map<string> map){/<string>

if (map == null) {

throw new IllegalArgumentException("map is null.");

}

this.map = map;

}

// 。。。。省略其餘內容

}

可以看到 就是對 HashMap 的一層封裝,並提供了一些個性化方法。有興趣的話可以去研究下源碼實現,這裡就不一一解讀了

其使用方式和 HashMap 並無太大區別

JSONObject person = new JSONObject();

person.put("name", "馬馬馬馬馬百萬");

person.put("age", 25);

person.put("area", "山東菏澤");

JSONObject drug = new JSONObject();

drug.put("drugName", "鹽酸丁卡因注射液");

drug.put("drugCode", "HXUDP000000000000MED0000342809");

drug.put("dosformName", "注射劑");

程序員:JSON、JSONObject 與 JSONArray 簡單講解

什麼是 JSONArray

其實剛才拿 List 與 Object 關係舉例是有跡可查的

僅針對於 fastjson 而言,因為沒看別的具體實現,怕被噴。含蓄點的好

存放數據的容器就是一個 List 的類型,默認創建為 ArrayList ,但不僅限於

public class JSONArray extends JSON implements List<object>, Cloneable, RandomAccess, Serializable {/<object>

private static final long serialVersionUID = 1L;

private final List<object> list;/<object>

protected transient Object relatedArray;

protected transient Type componentType;

public JSONArray(){

this.list = new ArrayList<object>();/<object>

}

public JSONArray(List<object> list){/<object>

this.list = list;

}

public JSONArray(int initialCapacity){

this.list = new ArrayList<object>(initialCapacity);/<object>

}

// 。。。省略餘下部分

}

JSONArray 的平常使用方法

內心獨白:不就是一個 List 中 套了個 Map 類結構嘛 對不對 品 你品 你仔細品

JSONObject person = new JSONObject();

person.put("name", "馬馬馬馬馬百萬");

JSONObject drug = new JSONObject();

drug.put("drugName", "鹽酸丁卡因注射液");

JSONArray array = new JSONArray();

array.add(person);

array.add(drug);

Fastjson 的簡單應用

將對象轉換為json字符串

import com.alibaba.fastjson.JSON;

String jsonStr = JSON.toJSONString(person);

將json字符串轉換為JSONObject對象

JSONObject jsonObject = JSON.parseObject(jsonStr);

將JSONObject 轉換為對象

JSONObject person = new JSONObject();

person.put("name", "馬馬馬馬馬百萬");

person.put("age", 25);

Student stuObj = JSON.toJavaObject(person, Student.class);

結束語

上述文章中並沒有涉及到複雜 JSON 對象,只是為了前期理解沒有舉例

下述 JSON 中涉及到了 數值、字符串、內置 JSON 對象、數組

{

"article": {

"row": 1024,

"lastUpdateTime": "2019-12-13 19:27:59",

"Title": "Java 中 JSONArray 與 JSONObject 詳細介紹結構及應用",

"images": {

"Url": "http://www.images.com",

"Height": 256,

"Width": "256"

},

"sections": [17, 18, 19, 20]

}

}

關於 JSON格式化 相關的網站

JSON解析及格式化個性網站 | 可以解析JSON及XML字符串的網站

關於 JSON 類庫項目地址

Json-lib | Gson | Jackson | FastJson

關於性能測試

性能測試的話可以在網上找些文章或者自己來驗證下,可以從不同的類型、數量多少等多維度測試

程序員:JSON、JSONObject 與 JSONArray 簡單講解



分享到:


相關文章: