Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發筆記之Json解析

android開發筆記之Json解析

編輯:關於Android編程

在上篇文章中我們提到在Android開發中經常用到xml文件,當然跟服務器打交道,大部分還是喜歡用Json數據。

Json的定義:

一種輕量級的數據交換格式,具有良好的可讀和便於快速編寫的特性。

JSON Vs XML

1.JSON和XML的數據可讀性基本相同

2.JSON和XML同樣擁有豐富的解析手段

3.JSON相對於XML來講,數據的體積小

4.JSON與JavaScript的交互更加方便

5.JSON對數據的描述性比XML較差

6.JSON的速度要遠遠快於XML

Json解析類涉及的類:

JSONObject:可以看作是一個json對象,這是系統中有關JSON定義的基本單元,其包含一對兒(Key/Value)數值。它對外部(External: 應用toString()方法輸出的數值)調用的響應體現為一個標准的字符串(例如:{“JSON”: “Hello, World”},最外被大括號包裹,其中的Key和Value被冒號”:”分隔)。其對於內部(Internal)行為的操作格式略微,例如:初始化一個JSONObject實例,引用內部的put()方法添加數值:new JSONObject().put(“JSON”, “Hello, World!”),在Key和Value之間是以逗號”,”分隔。Value的類型包括:Boolean、JSONArray、JSONObject、Number、String或者默認值JSONObject.NULL object 。

JSONStringer:json文本構建類 ,根據官方的解釋,這個類可以幫助快速和便捷的創建JSON text。其最大的優點在於可以減少由於 格式的錯誤導致程序異常,引用這個類可以自動嚴格按照JSON語法規則(syntax rules)創建JSON text。每個JSONStringer實體只能對應創建一個JSON text。。其最大的優點在於可以減少由於格式的錯誤導致程序異常,引用這個類可以自動嚴格按照JSON語法規則(syntax rules)創建JSON text。每個JSONStringer實體只能對應創建一個JSON text。

JSONArray:它代表一組有序的數值。將其轉換為String輸出(toString)所表現的形式是用方括號包裹,數值以逗號”,”分隔(例如: [value1,value2,value3],大家可以親自利用簡短的代碼更加直觀的了解其格式)。這個類的內部同樣具有查詢行為, get()和opt()兩種方法都可以通過index索引返回指定的數值,put()方法用來添加或者替換數值。同樣這個類的value類型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默認值JSONObject.NULL object。

JSONTokener:json解析類
JSONException:json中用到的異常

那就來干起來吧。

用到的Json數據:

{  name:張三,
    age:26,
    phone:[131,132],
    score:{語文:100,數學:60,理綜:{化學:120,物理:150}}
}

其實大家看到這個Json數據應該不難,因為看起來就覺得不是很難嘛,對的,那我來給大家個訣竅:

①見到大括號 {} 就轉成 JSONObject

②見到中括號 [] 就轉成 JSONArray

③JSONObject 獲得值使用 getType(key) type為Booeal 、Int 、String …..

④JSONArray 獲得值要使用下標

那就來寫寫:

解析有兩種方式都可以:使用 JSONObect 和 使用 JSONToken

這裡寫圖片描述

布局文件:

activity_main.xml



MainActivity.java

public class MainActivity extends Activity {
    private TextView tv;
    //JSON數據
    public static final String JSONDATA = "{name:張三 ,age:26,phone:[131,132],score:{語文:100,數學:60,理綜:{化學:120,物理:150}}}";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
    }
    public void btn(View view) {
        try {
            StringBuffer stringBuffer = new StringBuffer();
            //解析有兩種方式:JSONObject和JSONToken
            //第一種方式
            //最外層的JSONObject
//          JSONObject jsonObject = new JSONObject(JSONDATA);

            //第二種方式
            //1.最外層的JSONObject
            JSONTokener jsonTokener = new JSONTokener(JSONDATA);
            JSONObject jsonObject = (JSONObject) jsonTokener.nextValue();
            //取值
            stringBuffer.append("name" + jsonObject.getString("name") + "\n");
            stringBuffer.append("age" + jsonObject.getString("age") + "\n");

            //2.phone那個JSONArray
            JSONArray phoneArray = jsonObject.getJSONArray("phone");
            //取值
            stringBuffer.append("phone" + phoneArray.getString(0) + "  "
                    + phoneArray.getString(1) + "\n");

            //3.score那個JSONObject
            JSONObject scoreObject = jsonObject.getJSONObject("score");
            //取值
            stringBuffer.append("語文" + scoreObject.getString("語文") + "  "
                    + "數學" + scoreObject.getString("數學") + "  ");

            //4.理綜那個JSONObject
            JSONObject lizongObject = scoreObject.getJSONObject("理綜");
            //取值
            stringBuffer.append("化學" + lizongObject.getString("化學") + "  "
                    + "物理" + lizongObject.getString("物理") + "\n");

            //將解析的數據顯示到TextView上
            tv.setText(stringBuffer.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
}

效果:

這裡寫圖片描述

看看是不是很簡單呢,趕緊試試

**注:
JSON數據的格式不要寫錯了,注意中英輸入法,尤其是標點,不然解析不出來的哦。**

   
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved