我的位置:首頁 >   > 

    [Java]在JAVA中解析JSON 簡單教學

    發表時間:
    最近工作剛好遇到需要解析JSON格式的資料

    特別去找了一些方式來幫助我順利的解析擷取回來的JSON資料

    順便分享給大家,不是什麼太高深的技巧

    就JSON而言,就只有兩種,陣列[]跟物件{}

    然後是一種Key和Value的關係

    以下是一個很簡單的JSON

    {"Data":{"Name":"MichaelChan","Email":"XXXX@XXX.com","Phone":[1234567,0911123456]}}

    稍微解釋一下,Data是一個物件,裡頭包括Name、Email跟Phone

    然後Phonme是一個陣列,裡頭有兩個值

    接下來就是如何解析出我們要的值了

    1、若我們是要Data全部:

    import org.json.*;

    public class test{

    public static void main(String args[]){ 

      JSONObject j;
        try {
          String tmp = "{\"Data\":{\"Name\":\"MichaelChan\",\"Email\":\"XXXX@XXX.com\",\"Phone\":[1234567,0911123456]}}";

          j = new JSONObject(tmp);

          Object jsonOb = j.getJSONObject("Data");

          System.out.println(jsonOb);

        }catch(Exception e){
        System.err.println("Error: " + e.getMessage());
      }
     } 
    }

    因為Data是一個物件用{}包,所以我們宣告一個Object類別用getJSONObject抓取Data,

    就可以擷取到Data物件中的全部資料

    ====================================
    2、若我們要擷取到Name:


    import org.json.*;

    public class test{

    public static void main(String args[]){ 

      JSONObject j;
        try {
          String tmp = "{\"Data\":{\"Name\":\"MichaelChan\",\"Email\":\"XXXX@XXX.com\",\"Phone\":[1234567,0911123456]}}";

          j = new JSONObject(tmp);

          Object jsonOb = j.getJSONObject("Data").get("Name");

          System.out.println(jsonOb);

        }catch(Exception e){
          System.err.println("Error: " + e.getMessage());
      }
     } 
    }

    我們就只要在getJSONObject後面在加上一個get,把Key給get就可以抓到Name的值

    ====================================
    3、若我們要擷取到Phone的陣列:


    import org.json.*;

    public class test{

    public static void main(String args[]){ 

      JSONObject j;
        try {
          String tmp = "{\"Data\":{\"Name\":\"MichaelChan\",\"Email\":\"XXXX@XXX.com\",\"Phone\":[1234567,0911123456]}}";

          j = new JSONObject(tmp);

          Object jsonOb = j.getJSONObject("Data").getJSONArray("Phone");

          System.out.println(jsonOb);

        }catch(Exception e){
          System.err.println("Error: " + e.getMessage());
      }
     } 
    }

    因為Phone是陣列[]不是物件{},所以我們要用getJSONArray來擷取

    ====================================
    4、若我們要擷取到Phone的陣列中的一筆:


    import org.json.*;

    public class test{

    public static void main(String args[]){ 

      JSONObject j;
        try {
          String tmp = "{\"Data\":{\"Name\":\"MichaelChan\",\"Email\":\"XXXX@XXX.com\",\"Phone\":[1234567,0911123456]}}";

          j = new JSONObject(tmp);

          Object jsonOb = j.getJSONObject("Data").getJSONArray("Phone").get(0);

          System.out.println(jsonOb);

        }catch(Exception e){
          System.err.println("Error: " + e.getMessage());
      }
     } 
    }

    就跟2一樣,只要加上get(),但括號裡面就不是Key值,而是索引值

    ====================================

    其實解析JSON不難,只要像洋蔥一層一層剝開它,直到擷取到自己想要的資料為止

    遇到物件{}就用getJSONObject,遇到陣列[]就用getJSONArray,要取其中一個值就用get

    JSON其實蠻好用的,很多語言都有支持PHP、JS....等等

    看完這篇我相信遇到又臭又長的JSON,你也可以很順利的解析出來

    如果需要JSON程式,可到下方網址中下載,檔名是org,把壓縮檔裡的資料夾跟程式碼放在一起

    https://skydrive.live.com/?cid=dc8a37fc60fa1ade#cid=DC8A37FC60FA1ADE&id=DC8A37FC60FA1ADE%21126