深入淺析Android JSON解析
JSON語法
首先看JSON的語法和結(jié)構(gòu),這樣我們才知道怎么去解析它。JSON語法時JavaScript對象表示語法的子集。
JSON的值可以是:
數(shù)字(整數(shù)或者浮點數(shù))
字符串(在雙引號內(nèi))
邏輯值(true 或 false)
數(shù)組(使用方括號[]包圍)
對象( 使用花括號{}包圍)
null
JSON中有且只有兩種結(jié)構(gòu):對象和數(shù)組。
1、對象:對象在js中表示為“{}”括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 {key:value,key:value,…}的鍵值對的結(jié)構(gòu),在面向?qū)ο蟮恼Z言中,key為對象的屬性,value為對應(yīng)的屬性值,所以很容易理解,取值方法為 對象.key 獲取屬性值,這個屬性值的類型可以是 數(shù)字、字符串、數(shù)組、對象幾種。
2、數(shù)組:數(shù)組在js中是中括號“[]”括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 [“java”,“javascript”,“vb”,…],取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是 數(shù)字、字符串、數(shù)組、對象幾種。
做個Android網(wǎng)絡(luò)編程的同學(xué)一定對于JSON解析一點都不陌生,因為現(xiàn)在我們通過手機(jī)向服務(wù)器請求資源,服務(wù)器給我們返回的數(shù)據(jù)資源一般都是以JSON格式返回,當(dāng)然還有一些通過XML格式返回,相對JSON格式,XML格式的數(shù)據(jù)在處理時相對比較繁瑣,并且Android為我們提供了兩個解析JSON對象的類:JSONObject與JSONArray這兩個對象可以很好的滿足我們的需求,JSONArray對象可以以數(shù)組的形式將數(shù)據(jù)返回到手機(jī),JSONObject對象則可以以對象的形式將數(shù)據(jù)為我們封裝好返回,手機(jī)接收都這兩種數(shù)據(jù)后,通過解析,可以很方便的使用,大大的方便了我們的開發(fā)學(xué)習(xí)。
當(dāng)然在使用JSONObject進(jìn)行數(shù)據(jù)解析時,有兩種方式,一種通過鍵值對的形式一個一個的取數(shù)據(jù);另一種就是將JSONObject解析為具體的對象,然后通過對象的get、set方法進(jìn)行數(shù)據(jù)的讀取與操作,對于第一種方式,相信剛接觸JSON解析的小童鞋都是這樣干的,相對第一種方式,第二種方式更加的簡單方便,下面我們就一起學(xué)習(xí)一下如何實現(xiàn)將JSONObject對象轉(zhuǎn)化為具體的對象吧。
因為今天我們要探討的是關(guān)于JSONObject的解析,所以我就通過一個簡單的對象創(chuàng)建--對象封裝--對象解析--對象操作,為大家介紹一下如何進(jìn)行JSONObject向具體對象的轉(zhuǎn)化。
首先我們的對象類(user):
public class User { private String id; private String name; private String from; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } @Override public String toString() { return "User [id=" + id + ",name=" + name + ",from=" + from +"]"; } }
這里我重寫了對象的toString方法,這里一定要注意返回參數(shù)的格式:類名+'['+參數(shù)名+'='+參數(shù)+.....+']'
下面就是我們的對象創(chuàng)建與解析了:
1、JSONObject對象解析類:
//JSONObject解析類 public class JsonParseToObject { public Object AllJsonParseToObject(String json, String packageAddress) { Object parseObject = null; try { parseObject = JSON.parseObject(json, Class.forName(packageAddress)); } catch (ClassNotFoundException e) { e.printStackTrace(); } return parseObject; } }
2、JSON對象的創(chuàng)建與解析:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView text = (TextView) findViewById(R.id.hw); //將我們的對象屬性封裝都JSONObject中 JSONObject jo = new JSONObject(); jo.put("id", "16"); jo.put("name", "小了"); jo.put("from", "河南"); String str = jo.toString(); Toast.makeText(this, str, Toast.LENGTH_LONG).show(); //對JSONObject對象進(jìn)行解析 User u = (User) new JsonParseToObject().AllJsonParseToObject(jo.toString(), "com.example.jsontoobject.User"); //判斷JSONObject對象解析是否正確 if(u != null){ text.setText(jo.toString()+"\nid:"+u.getId()+";name:"+u.getName()+";from:"+u.getFrom());//進(jìn)行對象操作 }else{ text.setText("User == null"); } } }
布局文件很簡單就是一個文本框,用來顯示解析后的數(shù)據(jù)。
好了到這里我們關(guān)于JSONObject解析的知識就為大家介紹完畢,沒用過這種方式的小伙伴可以嘗試一下,還是挺方便的,如果你有更好的方式,還望交流學(xué)習(xí)。
以上內(nèi)容是小編給大家分享的Android JSON解析的全部敘述,希望可以幫助大家。
- Android中使用Gson解析JSON數(shù)據(jù)的兩種方法
- Android 解析JSON對象及實例說明
- android 解析json數(shù)據(jù)格式的方法
- Android App數(shù)據(jù)格式Json解析方法和常見問題
- Android M(6.x)使用OkHttp包解析和發(fā)送JSON請求的教程
- Android中g(shù)son、jsonobject解析JSON的方法詳解
- Android解析json數(shù)組對象的方法及Apply和數(shù)組的三個技巧
- Android利用Gson解析嵌套多層的Json的簡單方法
- Android json解析及簡單例子
- 探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式
- Android編程之json解析實例詳解
- Android編程簡單解析JSON格式數(shù)據(jù)的方法示例
相關(guān)文章
Android ListView position詳解及實例代碼
這篇文章主要介紹了Android ListView position的相關(guān)資料,在開發(fā)Android 應(yīng)用的時候你真的用對了嗎?這里給大家徹底解釋下,需要的朋友可以參考下2016-10-10Android將項目導(dǎo)出為Library并在項目中使用教程
這篇文章主要介紹了Android將項目導(dǎo)出為Library并在項目中使用教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07Android 數(shù)據(jù)庫打包隨APK發(fā)布的實例代碼
有些時候我們的軟件用到SQLite數(shù)據(jù)庫,這個時候怎么把一個做好的數(shù)據(jù)庫打包進(jìn)我們的APK呢2013-10-10Android 圖片保存到相冊不顯示的解決方案(兼容Android 10及更高版本)
這篇文章主要介紹了Android 圖片保存到系統(tǒng)相冊不顯示的解決方案,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下2021-04-04Android-Service實現(xiàn)手機(jī)壁紙自動更換
這篇文章主要為大家詳細(xì)介紹了Android-Service實現(xiàn)手機(jī)壁紙自動更換,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11Android 動態(tài)顯示和隱藏狀態(tài)欄詳解及實例
這篇文章主要介紹了Android 動態(tài)顯示和隱藏狀態(tài)欄的相關(guān)資料,需要的朋友可以參考下2017-06-06