Android JOSN 解析

一、JSON定義

? ? ? JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。 易于人閱讀和編寫。同時也易于機(jī)器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。 JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成為理想的數(shù)據(jù)交換語言。

二、JSON格式

JSON建構(gòu)于兩種結(jié)構(gòu):

? ? ? ?“名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀(jì)錄(record),結(jié)構(gòu)(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關(guān)聯(lián)數(shù)組 (associative array)。

值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數(shù)組(array)。

JSON具有以下這些形式:

? ? ? ?對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結(jié)束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。

數(shù)組是值(value)的有序集合。一個數(shù)組以“[”(左中括號)開始,“]”(右中括號)結(jié)束。值之間使用“,”(逗號)分隔。

值(value)可以是雙引號括起來的字符串(string)、數(shù)值(number)、true、false、?null、對象(object)或者數(shù)組(array)。這些結(jié)構(gòu)可以嵌套。

以上內(nèi)容摘自:《Json官網(wǎng)》

三、JSON解析常用類

1. Android JSON所有相關(guān)類,都在org.json包下

JSONObject、JSONArray、JSONException、JSONStringer、JSONTokener

2. 常見方法

使用get方法與使用opt方法的區(qū)別?

JsonObject 方法,opt* 與 get* 建議使用opt方法,因為get方法如果其內(nèi)容為空會直接拋出異常。不過JsonArray.opt*(index)會有越界問題需要特別注意。

opt、optBoolean、optDouble、optInt、optLong、optString、optJSONArray、optJSONObjectget、getBoolean、getDouble、getInt、getLong、getString、getJSONArray、getJSONObject

3. Android創(chuàng)建JSON

private String createJson()throwsJSONException

?{ ? ?JSONObject jsonObject =new JSONObject();

? ? ? jsonObject.put ("intKey",123);

? ? ? jsonObject.put ("doubleKey",10.1);

? ? ? jsonObject.put ("longKey",666666666);

? ? ? jsonObject.put ("stringKey","lalala");

? ? ? jsonObject.put ("booleanKey",true);

? ? ? JSONArray jsonArray =newJSONArray();

? ? ? jsonArray.put (0,111);

? ? ? jsonArray.put("second");

? ? ? jsonObject.put ("arrayKey", jsonArray);

? ? ? ?JSONObject innerJsonObject =newJSONObject();

? ? ? ?innerJsonObject.put ("innerStr","inner");

? ? ? ?jsonObject.put ("innerObjectKey", innerJsonObject);

? ? ? ?Log.e("Json", jsonObject.toString());returnjsonObject.toString();}

輸出結(jié)果:

{"intKey":123, "doubleKey":10.1, "longKey":666666666, "stringKey":"lalala", "booleanKey":true, "arrayKey":[111,"second"], "innerObjectKey":{"innerStr":"inner"}}

4. 解析上面創(chuàng)建的JSON

private void pareJson(String jsonStr) throws JSONException

?{ ? ?

? ? ? JSONObject jsonObject =newJSONObject(jsonStr);

? ? ? intintValue? = jsonObject.optInt("intKey");

? ? ? doubledoubleValue = jsonObject.optDouble("doubleKey");

? ? ? longlongValue= jsonObject.optLong("longKey");

? ? ? String strValue? ? = jsonObject.optString("stringKey");

? ? ? boolean boolValue? = jsonObject.optBoolean("booleanKey");

? ? ? JSONArrayarray= jsonObject.optJSONArray("arrayKey");

? ? ?intarrIntValue=array.optInt(0);

? ? ?String arrStrValue =array.optString(1);

? ? ? JSONObject innerJson = jsonObject.optJSONObject("innerObjectKey");

? ? ? String innerStr = innerJson.optString("innerStr");

? ? ? Log.e("Json","intValue = "+ intValue +" , doubleValue = "+ doubleValue+" , ? ? ? ?longValue = "+ longValue +" , strValue = "+ strValue+" , booleanValue = "+ boolValue +" , arrIntValue = "+ arrIntValue+" , arrStrValue = "+ arrStrValue +" , innerStr = "+ innerStr);? ? }

輸出結(jié)果:

intValue = 123 , doubleValue = 10.1 , longValue = 666666666 , strValue = lalala , booleanValue = true , arrIntValue = 111 , arrStrValue = second , innerStr = inner

更多具體信息詳見:

《android json解析及簡單例子》

《Android學(xué)習(xí)筆記44:JSON數(shù)據(jù)解析》

四、Android JSON解析庫

? ? ? ?上面介紹都是使用Android提供的原生類解析JSON,最大的好處是項目不需要引入第三方庫,但是如果比較注重開發(fā)效率而且不在意應(yīng)用大小增加幾百K的話,有以下JSON可供選擇:

1.Jackson

2.google-gson

3.Json-lib

《兩款JSON類庫Jackson與JSON-lib的性能對比(新增第三款測試)》

五、格式化工具

? ? ? 在日常開發(fā)中,如果涉及到與服務(wù)器端調(diào)試協(xié)議時,過程中難免遇到服務(wù)器端發(fā)送格式或者Android客戶端解析格式出現(xiàn)問題,這時需要把獲取到的JSON打印出來進(jìn)行問題定位,如果JSON比較短一眼就能看出來,但是如果很長的話想查找某一個字段或者JSON數(shù)組中某一位的值顯得特別困難,想要擺脫這種苦惱也很簡單,把JSON字符串格式化之后會發(fā)現(xiàn)苦惱瞬間無影無蹤。以下是以我常用的Notepad++進(jìn)行舉例,其他的編輯器也肯定有相應(yīng)的JSON插件,自己可以網(wǎng)上查找一下。

Notpad++ Json Viewer插件

安裝:

Notpad++ -> 插件(Plugins) -> Plugin Manager -> Show Plugin Manager -> Avaliable -> 選擇Json View -> 安裝(install)

使用:

選中Json字符串,

插件(Plugins) -> Format Json(快捷鍵Ctrl+Alt+Shift+M)

插件(Plugins) -> Show Json Viewer? 顯示Json視圖


兩篇非常好的關(guān)于josn解析的文章:?

1、Android系列---JSON數(shù)據(jù)解析 - xiaoluo501395377 - 博客園(很全面的解析)

2、[Android學(xué)習(xí)]JSON的三種解析方式 - Android移動開發(fā)技術(shù)文章_手機(jī)開發(fā) - 紅黑聯(lián)盟(三種解析方法)

最后編輯于
?著作權(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)容

  • 1 反射機(jī)制&JSON解析 【 Java的高級特性:反射機(jī)制 publicclass Student { pu...
    征程_Journey閱讀 1,006評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,825評論 25 709
  • JOSN的定義: 一種輕量級的數(shù)據(jù)交換格式,具有良好的可讀和便于快速編寫的特性。業(yè)內(nèi)主流技術(shù)為其提供了完整的解決方...
    熱愛生活的男孩子閱讀 695評論 2 1
  • 今夏看到了第一個蟬蛻 晚秋聞到一絲菊香 就像春天遲遲沒有看到迎春花開放 冬天沒有聽到雪落聲 都不覺得是真正的季節(jié) ...
    夏光草木閱讀 144評論 6 6
  • 看了這么多的干貨,小編這次要放雞湯了,唉唉唉,別走啊,看完了再吐槽啊。 前幾天小編看了《小王子》覺得深有感觸,當(dāng)然...
    被子哥閱讀 375評論 0 1

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