最近工作剛好遇到需要解析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