找回密碼
 註冊

在JAVA中解析JSON 簡單教學

来源: 跑山的節奏 2012-6-11 05:05 只看這個作者 |閱讀模式
0 7516
本文章最後由 跑山的節奏 於 2012-6-11 05:12 編輯

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


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


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


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


然後是一種Key和Value的關係


以下是一個很簡單的JSON


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


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


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


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


1、若我們是要Data全部:



  1. import org.json.*;

  2. public class test{

  3. public static void main(String args[]){

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

  7.       j = new JSONObject(tmp);

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

  9.       System.out.println(jsonOb);

  10.     }catch(Exception e){
  11.     System.err.println("Error: " + e.getMessage());
  12.   }
  13. }
  14. }
複製代碼

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


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


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

2、若我們要擷取到Name:



  1. import org.json.*;

  2. public class test{

  3. public static void main(String args[]){

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

  7.       j = new JSONObject(tmp);

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

  9.       System.out.println(jsonOb);

  10.     }catch(Exception e){
  11.       System.err.println("Error: " + e.getMessage());
  12.   }
  13. }
  14. }
複製代碼

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


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

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



  1. import org.json.*;

  2. public class test{

  3. public static void main(String args[]){

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

  7.       j = new JSONObject(tmp);

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

  9.       System.out.println(jsonOb);

  10.     }catch(Exception e){
  11.       System.err.println("Error: " + e.getMessage());
  12.   }
  13. }
  14. }
複製代碼

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


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

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



  1. import org.json.*;

  2. public class test{

  3. public static void main(String args[]){

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

  7.       j = new JSONObject(tmp);

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

  9.       System.out.println(jsonOb);

  10.     }catch(Exception e){
  11.       System.err.println("Error: " + e.getMessage());
  12.   }
  13. }
  14. }
複製代碼

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


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


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


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


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


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


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


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

給個讚

讚: 5.0
KTC
讚: 5
JAVA..讚啦.. 雖然我學了兩學期..還是..不會  發表於 2012-6-11 12:27
收藏
收藏1
http://blog.yam.com/ChenMichael

有時間的話,可以到我的網誌逛逛看看喔