最近工作剛好遇到需要解析JSON格式的資料

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

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

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

然後是一種Key和Value的關係

以下是一個很簡單的JSON

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

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

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

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

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

arrow
arrow
    文章標籤
    Java解析Json
    全站熱搜
    創作者介紹
    創作者 小小的工程師 的頭像
    小小的工程師

    小小工程師的0與1

    小小的工程師 發表在 痞客邦 留言(0) 人氣()