javascript
fastjson list转json字符串_程序员:JSON、JSONObject 与 JSONArray 简单讲解
fastjson簡介
fastjson 是阿里巴巴的開源JSON解析庫,它可以解析 JSON 格式的字符串,支持將 Java Bean 序列化為 JSON 字符串,也可以從 JSON 字符串反序列化到 JavaBean。比較牛的是下面這句話
fastjson 相對其他 JSON 庫的特點是快,從 2011 年 fastjson 發(fā)布1.1.x版本之后,其性能從未被其他 Java 實現(xiàn)的 JSON 庫超越
附上其 maven 庫坐標(biāo)
com.alibaba
fastjson
1.2.61
什么是 JSON
在最開始接觸 JSON 的時候,不太明白 JSON 的概念,感覺很籠統(tǒng)
其實 JSON 就是一種輕量級的數(shù)據(jù)交換格式,被廣泛應(yīng)用于 WEB 應(yīng)用程序開發(fā)
1.1 JSON 的優(yōu)勢
JSON 的簡潔 和 清晰的層次結(jié)構(gòu)
易于人閱讀和編寫,同時也易于機(jī)器解析和生成
有效的提升網(wǎng)絡(luò)傳輸效率
支持多種語言,很多流行的語言都對 JSON 格式有著很友好的支持
1.2 JSON 對象
這就是一個平常使用的 JSON 對象,特征就是多個屬性是被 {} 括起來的
{
"area": "山東菏澤",
"name": "馬馬馬馬馬百萬",
"age": 25
}
JSON 數(shù)組
JSON 數(shù)組其實就是包含了多個 JSON 對象的一個集合,數(shù)組是以 數(shù)組括號 [] 括起來的
[{
"area": "廣東",
"name": "山溪",
"age": 25
}, {
"area": "沙西",
"name": "馬希泰",
"age": 26
}]
JSON 數(shù)組并一定是要相同的 JSON 對象的集合,也可以是不同的對象,不過我在開發(fā)過程中并沒有這么使用過,感覺挺別扭的。因為如果將多個對象放進(jìn)一個 JSONArray 中的話,下意識認(rèn)為是相同類型的集合
下面這種類型也是正確的 JSON 數(shù)組格式
[{
"area": "江蘇",
"name": "徐州",
"age": 25
}, {
"drugCode": "HXUDP000000000000MED0000342809",
"dosformName": "注射",
"drugName": "打點滴"
}]
JSON、JSON對象、JSON數(shù)組區(qū)別
JSON 呢只是一種宏觀上的叫法,可以理解為是一種數(shù)據(jù)結(jié)構(gòu),就像 xml 結(jié)構(gòu)一樣,是一種規(guī)約性內(nèi)容;而 JSON 對象則是對 JSON 的具體體現(xiàn);JSON 數(shù)組則是將多個 JSON 對象進(jìn)行存儲的一個集合,可以想象成 Java 中的 List 和 Object 的關(guān)系
什么是 JSONObject
JSONObject 是根據(jù) JSON 形式在 Java 中存在的對象映射
各大 JSON 類庫的 JSONObject 內(nèi)部實現(xiàn)也是不太一樣的。這里以 fastjson 舉例
public class JSONObject extends JSON implements Map, Cloneable, Serializable, InvocationHandler {
private static final long serialVersionUID = 1L;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
private final Map map;
public JSONObject(){
this(DEFAULT_INITIAL_CAPACITY, false);
}
public JSONObject(Map map){
if (map == null) {
throw new IllegalArgumentException("map is null.");
}
this.map = map;
}
// 。。。。省略其余內(nèi)容
}
可以看到 就是對 HashMap 的一層封裝,并提供了一些個性化方法。有興趣的話可以去研究下源碼實現(xiàn),這里就不一一解讀了
其使用方式和 HashMap 并無太大區(qū)別
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", "注射劑");
什么是 JSONArray
其實剛才拿 List 與 Object 關(guān)系舉例是有跡可查的
僅針對于 fastjson 而言,因為沒看別的具體實現(xiàn),怕被噴。含蓄點的好
存放數(shù)據(jù)的容器就是一個 List 的類型,默認(rèn)創(chuàng)建為 ArrayList ,但不僅限于
public class JSONArray extends JSON implements List, Cloneable, RandomAccess, Serializable {
private static final long serialVersionUID = 1L;
private final List list;
protected transient Object relatedArray;
protected transient Type componentType;
public JSONArray(){
this.list = new ArrayList();
}
public JSONArray(List list){
this.list = list;
}
public JSONArray(int initialCapacity){
this.list = new ArrayList(initialCapacity);
}
// 。。。省略余下部分
}
JSONArray 的平常使用方法
內(nèi)心獨(dú)白:不就是一個 List 中 套了個 Map 類結(jié)構(gòu)嘛 對不對 品 你品 你仔細(xì)品
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 的簡單應(yīng)用
將對象轉(zhuǎn)換為json字符串
import com.alibaba.fastjson.JSON;
String jsonStr = JSON.toJSONString(person);
將json字符串轉(zhuǎn)換為JSONObject對象
JSONObject jsonObject = JSON.parseObject(jsonStr);
將JSONObject 轉(zhuǎn)換為對象
JSONObject person = new JSONObject();
person.put("name", "馬馬馬馬馬百萬");
person.put("age", 25);
Student stuObj = JSON.toJavaObject(person, Student.class);
結(jié)束語
上述文章中并沒有涉及到復(fù)雜 JSON 對象,只是為了前期理解沒有舉例
下述 JSON 中涉及到了 數(shù)值、字符串、內(nèi)置 JSON 對象、數(shù)組
{
"article": {
"row": 1024,
"lastUpdateTime": "2019-12-13 19:27:59",
"Title": "Java 中 JSONArray 與 JSONObject 詳細(xì)介紹結(jié)構(gòu)及應(yīng)用",
"images": {
"Url": "http://www.images.com",
"Height": 256,
"Width": "256"
},
"sections": [17, 18, 19, 20]
}
}
關(guān)于 JSON格式化 相關(guān)的網(wǎng)站
JSON解析及格式化個性網(wǎng)站 | 可以解析JSON及XML字符串的網(wǎng)站
關(guān)于 JSON 類庫項目地址
Json-lib | Gson | Jackson | FastJson
關(guān)于性能測試
性能測試的話可以在網(wǎng)上找些文章或者自己來驗證下,可以從不同的類型、數(shù)量多少等多維度測試
總結(jié)
以上是生活随笔為你收集整理的fastjson list转json字符串_程序员:JSON、JSONObject 与 JSONArray 简单讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 发光功率980W 功率60W 色温600
- 下一篇: 问下推上卖片的都是骗子吗?