概念:JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。
特點:
- 本質(zhì)是具有特定格式的字符串
- JSON完全獨立于編程語言
- JSON比XML數(shù)據(jù)傳輸?shù)挠行砸叱龊芏?/li>
JSON數(shù)據(jù)結(jié)構(gòu):
-
整體結(jié)構(gòu)
- String json1="{"id":12 , "name":"Tom"}"
- String json1="[{"id":12 , "name":"Tom"},{"id":13 , "name":"Sum"}]"
-
JSON 對象(java-map)
(1)**JSON**對象的結(jié)構(gòu):{key1:value1,key2,value2} (2)**key**的數(shù)據(jù)類型:字符串 (3)**value**的數(shù)據(jù)類型:數(shù)值,字符串,null、json數(shù)組[]、json對象{} -
JSON 數(shù)組(java-list)
(1)**JSON**數(shù)組的結(jié)構(gòu):[value1,value2,value3] (2)**value**的數(shù)據(jù)類型:數(shù)值,字符串,null、json數(shù)組[]、json對象{}
正確例子:[1,"ab",[],{"n":123,"b":"abc"}]
錯誤例子:[1,"a":3]
JSON解析方向:
JSON數(shù)據(jù)格式都是字符串,操作起來都不大方便。
如果將JSON轉(zhuǎn)換成JAVA bean操作起來就很方便
JSON的解析方向:
1.將java對象(包含集合)轉(zhuǎn)換成json字符串 ---在服務(wù)器端應(yīng)用
2.將json格式字符串轉(zhuǎn)換為java對象(包含集合) ---在客戶端應(yīng)用
(1.2:參考客戶端與服務(wù)端數(shù)據(jù)轉(zhuǎn)行)
3.JSON和Java之間的轉(zhuǎn)換關(guān)系:
- JSON對應(yīng)Java對象
- JSON數(shù)組和Java對象構(gòu)成的List對應(yīng)
JSON解析技術(shù):
1)Android原生技術(shù)
特點:編程相對麻煩,但是是Google官方提供的,有些JSON數(shù)據(jù)必須要Android原生技術(shù)來解析。Google官方?jīng)]有提供將Java轉(zhuǎn)換成json數(shù)據(jù)的API
數(shù)據(jù)之間轉(zhuǎn)換:
(1)將JSON格式的字符串{}轉(zhuǎn)換成Java對象
API:JSONObject(String json):將json字符串解析為json對象
Xxx getXxx (String name):根據(jù)name,在.json對象中得到對應(yīng)的value
Xxx optXxx (String json):根據(jù)name,在.json對象中得到對應(yīng)的value
get和opt的區(qū)別而:optXxx會在對應(yīng)的key中的值不存在的時候返回一個空字符串或者你指定的默認(rèn)值,而getString會出現(xiàn)空指針異常的錯誤
(2)將JSON格式的字符串[]轉(zhuǎn)換成Java對象的List
API:JSONArray(String json):將json字符串解析為json數(shù)組
int length ():得到j(luò)son數(shù)組中元素的個數(shù)
Xxx getXxx (String name):根據(jù)name,在.json對象中得到對應(yīng)的value
Xxx optXxx (String json):根據(jù)name,在.json對象中得到對應(yīng)的value
get和opt的區(qū)別而:optXxx會在對應(yīng)的key中的值不存在的時候返回一個空字符串或者你指定的默認(rèn)值,而getString會出現(xiàn)空指針異常的錯誤
(3)復(fù)雜json的數(shù)據(jù)解析
(4)特殊json的數(shù)據(jù)解析
2)Gson框架技術(shù)
(Gson)[http://mvnrepository.com/artifact/com.google.code.gson/gson]特點:編碼簡介,谷歌官方推薦
數(shù)據(jù)間轉(zhuǎn)化:
(1)將json格式的字符串{}轉(zhuǎn)換成Java對象
1. 將Gson的jar包導(dǎo)入到項目中
2. 創(chuàng)建Gson對象: Gson gson=new Gson();
3.通過創(chuàng)建的Gson對象調(diào)用fromJson()方法,返回該JSON數(shù)據(jù)對應(yīng)的java對象。
ShopInfo shopInfo=gson.fromJson(json,ShopInfo .class);
(2)將json格式的字符串[]轉(zhuǎn)換成Java對象的List
1. 將Gson的jar包導(dǎo)入到項目中
2. 創(chuàng)建Gson對象: Gson gson=new Gson();
3.通過創(chuàng)建的Gson對象調(diào)用fromJson(String json,Type typeOfT)
ShopInfo shopInfo=gson.fromJson(json,new TypeToken<List<ShopInfo>>(){}.getType());
(3)將Java對象轉(zhuǎn)換成json字符串{}:String toJson(Object src)
1. 將Gson的jar包導(dǎo)入到項目中
2. 創(chuàng)建Gson對象: Gson gson=new Gson();
3.通過創(chuàng)建的Gson對象調(diào)用toJson()方法,返回該JSON數(shù)據(jù)
ShopInfo shopInfo=new ShopInfo (1,"鮑魚",250.0);
String json= gson.toJson(shopInfo);
(4)將Java對象的List轉(zhuǎn)換成json字符串[]
1. 將Gson的jar包導(dǎo)入到項目中
2. 創(chuàng)建Gson對象: Gson gson=new Gson();
3.通過創(chuàng)建的Gson對象調(diào)用toJson()方法,返回該JSON數(shù)據(jù)
List<ShopInfo> shops=new ArrayList<>():
String json= gson.toJson(shops);