Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android技能-創建Json文本及Json解析

Android技能-創建Json文本及Json解析

編輯:關於Android編程

摘要:Json數據在安卓開發過程中是非常常見的,在請求服務器端數據的時候,服務器端返回的無非就是三種類型:HTML,XML,JSON。所以學習JSON對安卓程序員來說是非常重要的。

什麼是JSON

JSON:JavaScript Object Notation。顧名思義,JSON數據是源自於JavaScript,學習過JavaScript(以下簡稱JS)的人都知道,我們在JS腳本裡面創建對象時,都是以鍵值對的形式編寫的。例如,我們在JS裡面創建一個Json對象時是這麼定義的:

 var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};

 

很容易看出,屬性之間是通過逗號分隔開,鍵與值之間是通過雙引號分隔開,而JSON數據也是如此。

JSON的數據類型

json一共有兩種數據結構。

JsonObject

一種是以 (key/value)對形式存在的無序的jsonObject對象。對象使用大括號括起來,屬性之間使用逗號分隔開。

\

例如:{"name": "jack"}, 這就是一個最簡單的json對象,對於這種數據格式,key值必須要是string類型,而對於value,則可以是string、number、object、array等數據類型。

 

JsonArray

另一種數據格式就是有序的value的集合,這種形式被稱為是JsonArray。數組是值的有序集合,值與值之間使用逗號分隔開,集合用中括號括起來。

\

 

創建JSON文本

例如我們要創建以下類型的Jjson數據:

 

{"person":{"name":"zhangsan", "phone":["123", "456"],"address":"guangdong"}}


 

使用JSONOject和JSONArray創建

  /**
    * 使用JsonObject和JsonArray創建JSON對象
    */
    public void makeJson() {
        try {
            JSONObject object = new JSONObject();

            JSONObject person = new JSONObject();
            //名字
            person.put("name", "zhangsan");
            //電話
            JSONArray phone = new JSONArray();
            phone.put("123").put("456");
            person.put("phone", phone);
            //地址
            person.put("address", "guangdong");

            object.put("person", person);

            Log.i("JSON_LOG", object.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

 

輸出結果

\

使用JsonStringer創建

   /**
     * 通過JsonStringer創建JSON對象
     */
    public void makeJsonStringer() {
        try {
            JSONStringer jsonText = new JSONStringer();
            // 首先是{,對象開始。object和endObject必須配對使用
            jsonText.object();

            jsonText.key("person");

            jsonText.object();

            jsonText.key("name");
            jsonText.value("zhangsan");

            jsonText.key("phone");
            // 鍵phone的值是數組。array和endArray必須配對使用
            jsonText.array();
            jsonText.value("123").value("456");
            jsonText.endArray();

            jsonText.key("address");
            jsonText.value("Guangdong");

            jsonText.endObject();

            jsonText.endObject();


            Log.i("JSON_LOG", jsonText.toString());
        } catch (JSONException ex) {
            throw new RuntimeException(ex);
        }
    }

 

輸出結果:

\

JSON解析

1. 解析{"key", "Object"}類型的

{"person":{"name":"zhangsan", "phone":["123", "456"],"address":"guangdong"}}

 

解析代碼

 

    /**
     * JSON解析
     * @param json
     * @return
     */
    public static String JsonToString(String json) {
        Person person = new Person();
        try {
            //獲取到整個Json數據
            JSONObject object = new JSONObject(json);
            //解析最外層,獲得person鍵對應的object值
            JSONObject personObject = object.getJSONObject("person");
            //解析object值裡面的每一個屬性
            person.setName(personObject.getString("name"));
            //屬性值是數組,則使用JSONArray獲取
            JSONArray phoneArray = personObject.getJSONArray("phone");
            List phone = new ArrayList<>();
            for (int i = 0; i < phoneArray.length(); i++) {
                phone.add((String) phoneArray.get(i));
            }
            person.setPhone(phone);
            person.setAddress(personObject.getString("address"));
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return person.toString();
    }


 


 

結果

\

 

2. 解析{"Object"}類型

{"name":"zhangsan", "phone":["123", "456"],"address":"guangdong"}

  \

這麼解析:

 

   /**
     * 解析單個對象的JSON數據
     * @param json
     * @return
     */
    public static String JsonParse(String json) {
        Person person = new Person();
        try {
            JSONObject personObject = new JSONObject(json);
            //解析object值裡面的每一個屬性
            person.setName(personObject.getString("name"));
            //屬性值是數組,則使用JSONArray獲取
            JSONArray phoneArray = personObject.getJSONArray("phone");
            List phone = new ArrayList<>();
            for (int i = 0; i < phoneArray.length(); i++) {
                phone.add((String) phoneArray.get(i));
            }
            person.setPhone(phone);
            person.setAddress(personObject.getString("address"));
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return person.toString();
    }


 

3. 解析{"value"}類型

["123", "456", "789"];

 

解析方法:

 

    /**
     * 解析數組型的JSON數據
     * @param json
     * @return
     */
    public static List JsonParseToArray(String json){
        List list = new ArrayList<>();
        try {
            JSONArray array = new JSONArray(json);
            for (int i=0; i

 

解析總結 JSON解析無非就是通過JSONObject和JSONArray不斷地對數據進行解析,歸根結底每一種數據都是可以分解為以上的三種最基本的解析,所以大家只要掌握好JSONObject和JSONArray,即便再復雜的數據類型,大家也可以解析得得心應手。

 

GSON

GSON是Google開發的開源的JAVA API,可以用於JSON的創建和JSON的解析。下面對GSON做一個最基本的介紹。更多了解http://sites.google.com/site/gson/

首先需要下載GSON的jar包,自行度娘。 其次,我們使用GSON來創建JSON和解析JSON都要有相對應的JavaBean,所以GSON可以幫助我們更加簡便地實現Bean和JSON的轉換。 以下例子我們都是用Person類的JavaBean:

 

    public class Person {
	    private String name;
	    private List phone;
	    private String address;
	
	    public Person() {
	
	    }
	
	    public Person(String name, List phone, String address) {
	        this.name = name;
	        this.phone = phone;
	        this.address = address;
	    }
	
	    public String getName() {
	        return name;
	    }
	
	    public void setName(String name) {
	        this.name = name;
	    }
	
	    public List getPhone() {
	        return phone;
	    }
	
	    public void setPhone(List phone) {
	        this.phone = phone;
	    }
	
	    public String getAddress() {
	        return address;
	    }
	
	    public void setAddress(String address) {
	        this.address = address;
	    }
	
	    @Override
	    public String toString() {
	        return "Person{" +
	                "name='" + name + '\'' +
	                ", phone=" + phone +
	                ", address='" + address + '\'' +
	                '}';
	    }
	}


 

Bean轉換為JSON

    /**
     * GSON轉換為JSON
     *
     * @return json
     */
    public String beanToJson() {

        //賦值給一個person實例
        List phone = new ArrayList<>();
        phone.add("123");
        phone.add("456");
        Person person = new Person("jack", phone, "Guangzhou");

        //實例化GSON
        Gson gson = new Gson();
        //調用gson.toJson將Bean轉為JSON
        String json = gson.toJson(person);
        return json;
    }

 

JSON轉換為Bean

    /**
     * JSON轉換為Bean
     * @param json
     * @return
     */
    public String jsonToBean(String json) {
        Person person = new Person();
        Gson gson = new Gson();
        //調用gson.fromJson將json轉為bean
        person = gson.fromJson(json, Person.class);
        return person.toString();
    }


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