深入淺析Android JSON解析
JSON語(yǔ)法
首先看JSON的語(yǔ)法和結(jié)構(gòu),這樣我們才知道怎么去解析它。JSON語(yǔ)法時(shí)JavaScript對(duì)象表示語(yǔ)法的子集。
JSON的值可以是:
數(shù)字(整數(shù)或者浮點(diǎn)數(shù))
字符串(在雙引號(hào)內(nèi))
邏輯值(true 或 false)
數(shù)組(使用方括號(hào)[]包圍)
對(duì)象( 使用花括號(hào){}包圍)
null
JSON中有且只有兩種結(jié)構(gòu):對(duì)象和數(shù)組。
1、對(duì)象:對(duì)象在js中表示為“{}”括起來(lái)的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 {key:value,key:value,…}的鍵值對(duì)的結(jié)構(gòu),在面向?qū)ο蟮恼Z(yǔ)言中,key為對(duì)象的屬性,value為對(duì)應(yīng)的屬性值,所以很容易理解,取值方法為 對(duì)象.key 獲取屬性值,這個(gè)屬性值的類型可以是 數(shù)字、字符串、數(shù)組、對(duì)象幾種。
2、數(shù)組:數(shù)組在js中是中括號(hào)“[]”括起來(lái)的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 [“java”,“javascript”,“vb”,…],取值方式和所有語(yǔ)言中一樣,使用索引獲取,字段值的類型可以是 數(shù)字、字符串、數(shù)組、對(duì)象幾種。
做個(gè)Android網(wǎng)絡(luò)編程的同學(xué)一定對(duì)于JSON解析一點(diǎn)都不陌生,因?yàn)楝F(xiàn)在我們通過(guò)手機(jī)向服務(wù)器請(qǐng)求資源,服務(wù)器給我們返回的數(shù)據(jù)資源一般都是以JSON格式返回,當(dāng)然還有一些通過(guò)XML格式返回,相對(duì)JSON格式,XML格式的數(shù)據(jù)在處理時(shí)相對(duì)比較繁瑣,并且Android為我們提供了兩個(gè)解析JSON對(duì)象的類:JSONObject與JSONArray這兩個(gè)對(duì)象可以很好的滿足我們的需求,JSONArray對(duì)象可以以數(shù)組的形式將數(shù)據(jù)返回到手機(jī),JSONObject對(duì)象則可以以對(duì)象的形式將數(shù)據(jù)為我們封裝好返回,手機(jī)接收都這兩種數(shù)據(jù)后,通過(guò)解析,可以很方便的使用,大大的方便了我們的開(kāi)發(fā)學(xué)習(xí)。
當(dāng)然在使用JSONObject進(jìn)行數(shù)據(jù)解析時(shí),有兩種方式,一種通過(guò)鍵值對(duì)的形式一個(gè)一個(gè)的取數(shù)據(jù);另一種就是將JSONObject解析為具體的對(duì)象,然后通過(guò)對(duì)象的get、set方法進(jìn)行數(shù)據(jù)的讀取與操作,對(duì)于第一種方式,相信剛接觸JSON解析的小童鞋都是這樣干的,相對(duì)第一種方式,第二種方式更加的簡(jiǎn)單方便,下面我們就一起學(xué)習(xí)一下如何實(shí)現(xiàn)將JSONObject對(duì)象轉(zhuǎn)化為具體的對(duì)象吧。
因?yàn)榻裉煳覀円接懙氖顷P(guān)于JSONObject的解析,所以我就通過(guò)一個(gè)簡(jiǎn)單的對(duì)象創(chuàng)建--對(duì)象封裝--對(duì)象解析--對(duì)象操作,為大家介紹一下如何進(jìn)行JSONObject向具體對(duì)象的轉(zhuǎn)化。
首先我們的對(duì)象類(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 +"]";
}
}
這里我重寫了對(duì)象的toString方法,這里一定要注意返回參數(shù)的格式:類名+'['+參數(shù)名+'='+參數(shù)+.....+']'
下面就是我們的對(duì)象創(chuàng)建與解析了:
1、JSONObject對(duì)象解析類:
//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對(duì)象的創(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);
//將我們的對(duì)象屬性封裝都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();
//對(duì)JSONObject對(duì)象進(jìn)行解析
User u = (User) new JsonParseToObject().AllJsonParseToObject(jo.toString(), "com.example.jsontoobject.User");
//判斷JSONObject對(duì)象解析是否正確
if(u != null){
text.setText(jo.toString()+"\nid:"+u.getId()+";name:"+u.getName()+";from:"+u.getFrom());//進(jìn)行對(duì)象操作
}else{
text.setText("User == null");
}
}
}
布局文件很簡(jiǎn)單就是一個(gè)文本框,用來(lái)顯示解析后的數(shù)據(jù)。
好了到這里我們關(guān)于JSONObject解析的知識(shí)就為大家介紹完畢,沒(méi)用過(guò)這種方式的小伙伴可以嘗試一下,還是挺方便的,如果你有更好的方式,還望交流學(xué)習(xí)。
以上內(nèi)容是小編給大家分享的Android JSON解析的全部敘述,希望可以幫助大家。
- Android中使用Gson解析JSON數(shù)據(jù)的兩種方法
- Android 解析JSON對(duì)象及實(shí)例說(shuō)明
- android 解析json數(shù)據(jù)格式的方法
- Android App數(shù)據(jù)格式Json解析方法和常見(jiàn)問(wèn)題
- Android M(6.x)使用OkHttp包解析和發(fā)送JSON請(qǐng)求的教程
- Android中g(shù)son、jsonobject解析JSON的方法詳解
- Android解析json數(shù)組對(duì)象的方法及Apply和數(shù)組的三個(gè)技巧
- Android利用Gson解析嵌套多層的Json的簡(jiǎn)單方法
- Android json解析及簡(jiǎn)單例子
- 探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式
- Android編程之json解析實(shí)例詳解
- Android編程簡(jiǎn)單解析JSON格式數(shù)據(jù)的方法示例
相關(guān)文章
Android SQLite數(shù)據(jù)庫(kù)版本升級(jí)的管理實(shí)現(xiàn)
這篇文章主要介紹了Android SQLite數(shù)據(jù)庫(kù)版本升級(jí)的管理實(shí)現(xiàn)的相關(guān)資料,這里提供實(shí)現(xiàn)代碼幫助大家掌握這部分內(nèi)容,需要的朋友可以參考下2017-09-09
FragmentStatePagerAdapter保存恢復(fù)下拉刷新Fragment內(nèi)存數(shù)據(jù)
這篇文章主要為大家介紹了FragmentStatePagerAdapter保存恢復(fù)下拉刷新Fragment內(nèi)存數(shù)據(jù)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Android 頂部標(biāo)題欄隨滑動(dòng)時(shí)的漸變隱藏和漸變顯示效果
這篇文章主要介紹了Android 頂部標(biāo)題欄隨滑動(dòng)時(shí)的漸變隱藏和漸變顯示效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06
Android Studio配置Kotlin開(kāi)發(fā)環(huán)境詳細(xì)步驟
這篇文章主要介紹了Android Studio配置Kotlin開(kāi)發(fā)環(huán)境詳細(xì)步驟的相關(guān)資料,需要的朋友可以參考下2017-05-05
Flutter實(shí)現(xiàn)心動(dòng)的動(dòng)畫特效
為了追求更好的用戶體驗(yàn),有時(shí)候我們需要一個(gè)類似心跳一樣跳動(dòng)著的控件來(lái)吸引用戶的注意力。本文將利用Flutter實(shí)現(xiàn)這一動(dòng)畫特效,需要的可以參考一下2022-04-04
Android懸浮球及全局返回功能的實(shí)現(xiàn)示例
這篇文章主要介紹了Android懸浮球及全局返回功能的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
一文理解Android系統(tǒng)中強(qiáng)指針的實(shí)現(xiàn)
因?yàn)锳ndroid中很多地方代碼是用C++編寫,為了能夠保證C++中指針能夠被正確的釋放,于是Android引入了其實(shí)在C++中已經(jīng)有的智能指針技術(shù)2021-10-10
Android Service(不和用戶交互應(yīng)用組件)案例分析
Service是在一段不定的時(shí)間運(yùn)行在后臺(tái),不和用戶交互應(yīng)用組件,本文將詳細(xì)介紹,需要了解的朋友可以參考下2012-12-12

