日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android json解析及简单例子

發(fā)布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android json解析及简单例子 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

不多說廢話,直接代碼


JSONObject, JSONArray來構(gòu)建json文本

代碼
  • // 假設(shè)現(xiàn)在要創(chuàng)建這樣一個json文本

  • // {

  • // "phone" : ["12345678", "87654321"], // 數(shù)組

  • // "name" : "yuanzhifei89", // 字符串

  • // "age" : 100, // 數(shù)值

  • // "address" : { "country" : "china", "province" : "jiangsu" }, // 對象

  • // "married" : false // 布爾值

  • // }

  • try {

  • // 首先最外層是{},是創(chuàng)建一個對象

  • JSONObject person = new JSONObject();

  • // 第一個鍵phone的值是數(shù)組,所以需要創(chuàng)建數(shù)組對象

  • JSONArray phone = new JSONArray();

  • phone.put("12345678").put("87654321");

  • person.put("phone", phone);

  • person.put("name", "yuanzhifei89");

  • person.put("age", 100);

  • // 鍵address的值是對象,所以又要創(chuàng)建一個對象

  • JSONObject address = new JSONObject();

  • address.put("country", "china");

  • address.put("province", "jiangsu");

  • person.put("address", address);

  • person.put("married", false);

  • } catch (JSONException ex) {

  • // 鍵為null或使用json不支持的數(shù)字格式(NaN, infinities)

  • thrownew RuntimeException(ex);

  • }


  • getType和optType api的使用

    getType可以將要獲取的鍵的值轉(zhuǎn)換為指定的類型,如果無法轉(zhuǎn)換或沒有值則拋出JSONException
    optType也是將要獲取的鍵的值轉(zhuǎn)換為指定的類型,無法轉(zhuǎn)換或沒有值時返回用戶提供或這默認提供的值 代碼
  • try {

  • // 所有使用的對象都是用上面創(chuàng)建的對象

  • // 將第一個電話號碼轉(zhuǎn)換為數(shù)值和將名字轉(zhuǎn)換為數(shù)值

  • phone.getLong(0);

  • person.getLong("name"); // 會拋異常,因為名字無法轉(zhuǎn)換為long

  • phone.optLong(0); // 代碼內(nèi)置的默認值

  • phone.optLong(0, 1000); // 用戶提供的默認值

  • person.optLong("name");

  • person.optLong("name", 1000); // 不像上面那樣拋異常,而是返回1000

  • } catch (JSONException ex) {

  • // 異常處理代碼

  • }


  • 除了上面的兩個類,還可以使用JSONStringer來構(gòu)建json文本

    Java代碼
  • try {

  • JSONStringer jsonText = new JSONStringer();

  • // 首先是{,對象開始。object和endObject必須配對使用

  • jsonText.object();

  • jsonText.key("phone");

  • // 鍵phone的值是數(shù)組。array和endArray必須配對使用

  • jsonText.array();

  • jsonText.value("12345678").value("87654321");

  • jsonText.endArray();

  • jsonText.key("name");

  • jsonText.value("yuanzhifei89");

  • jsonText.key("age");

  • jsonText.value(100);

  • jsonText.key("address");

  • // 鍵address的值是對象

  • jsonText.object();

  • jsonText.key("country");

  • jsonText.value("china");

  • jsonText.key("province");

  • jsonText.value("jiangsu");

  • jsonText.endObject();

  • jsonText.key("married");

  • jsonText.value(false);

  • // },對象結(jié)束

  • jsonText.endObject();

  • } catch (JSONException ex) {

  • thrownew RuntimeException(ex);

  • }


  • json文本解析類JSONTokener
    按照RFC4627規(guī)范將json文本解析為相應(yīng)的對象。

    對于將json文本解析為對象,只需要用到該類的兩個api:
    構(gòu)造函數(shù)
    public Object nextValue();

    代碼
  • // {

  • // "phone" : ["12345678", "87654321"], // 數(shù)組

  • // "name" : "yuanzhifei89", // 字符串

  • // "age" : 100, // 數(shù)值

  • // "address" : { "country" : "china", "province" : "jiangsu" }, // 對象

  • // "married" : false // 布爾值

  • // }

  • privatestaticfinal String JSON =

  • "{" +

  • " \"phone\" : [\"12345678\", \"87654321\"]," +

  • " \"name\" : \"yuanzhifei89\"," +

  • " \"age\" : 100," +

  • " \"address\" : { \"country\" : \"china\", \"province\" : \"jiangsu\" }," +

  • " \"married\" : false," +

  • "}";

  • try {

  • JSONTokener jsonParser = new JSONTokener(JSON);

  • // 此時還未讀取任何json文本,直接讀取就是一個JSONObject對象。

  • // 如果此時的讀取位置在"name" : 了,那么nextValue就是"yuanzhifei89"(String)

  • JSONObject person = (JSONObject) jsonParser.nextValue();

  • // 接下來的就是JSON對象的操作了

  • person.getJSONArray("phone");

  • person.getString("name");

  • person.getInt("age");

  • person.getJSONObject("address");

  • person.getBoolean("married");

  • } catch (JSONException ex) {

  • // 異常處理代碼

  • }


  • 其它的api基本就是用來查看json文本中的文本的

    代碼
  • try {

  • JSONTokener jsonParser = new JSONTokener(JSON);

  • // 繼續(xù)向下讀8個json文本中的字符。此時剛開始,即在{處

  • jsonParser.next(8); //{ "phone。tab算一個字符

  • // 繼續(xù)向下讀1個json文本中的字符

  • jsonParser.next(); //"

  • // 繼續(xù)向下讀取一個json文本中的字符。該字符不是空白、同時也不是注視中的字符

  • jsonParser.nextClean(); //:

  • // 返回當前的讀取位置到第一次遇到'a'之間的字符串(不包括a)。

  • jsonParser.nextString('a'); // ["12345678", "87654321"], "n(前面有兩個空格)

  • // 返回當前讀取位置到第一次遇到字符串中(如"0089")任意字符之間的字符串,同時該字符是trimmed的。(此處就是第一次遇到了89)

  • jsonParser.nextTo("0089"); //me" : "yuanzhifei

  • // 讀取位置撤銷一個

  • jsonParser.back();

  • jsonParser.next(); //i

  • // 讀取位置前進到指定字符串處(包括字符串)

  • jsonParser.skipPast("address");

  • jsonParser.next(8); //" : { "c

  • // 讀取位置前進到執(zhí)行字符處(不包括字符)

  • jsonParser.skipTo('m');

  • jsonParser.next(8); //married"

  • } catch (JSONException ex) {

  • // 異常處理代碼

  • }

  • 轉(zhuǎn)載于:https://blog.51cto.com/caizhiyong/1279434

    《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的android json解析及简单例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。