JSON之手動解析

概念:JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。
特點:

  1. 本質(zhì)是具有特定格式的字符串
  2. JSON完全獨立于編程語言
  3. 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);

3)FastJson框架技術(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,639評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評論 18 399
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx閱讀 8,496評論 0 16
  • 類的構(gòu)造函數(shù) init() 錯誤代碼 學(xué)到面向?qū)ο筮@個部分,是不是所有人都犯過這個錯誤,構(gòu)造函數(shù)init() 的i...
    goodAndBad閱讀 230評論 2 0
  • 摘錄自Thinking in Java Ordinarily, when you create a class y...
    Addiefly閱讀 506評論 0 1

友情鏈接更多精彩內(nèi)容