簡單說明:
為了方便資料在用戶端及伺服器端的傳輸,有時候我們會用一些比較方便組織的資料類型,比如json、xml等傳給用戶端,用戶端也可以重新組織資料傳回伺服器端。JSON和XML提供了一套比較方便的資料群組織形式。。並且有很多現成的類庫用於解析這些資料。。
本文是對net.sf.json使用後的總結。。目前官方開源的對json進行處理的項目很多,fastjson還有其它等等。。視自己處理問題的複雜程度考慮選擇使用不同的依賴包。。
如果使用maven構建項目,需要對以下兩個包進行依賴
<dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.2.3</version></dependency><dependency><groupId>xom</groupId><artifactId>xom</artifactId><version>1.2.5</version></dependency>
如果使用Eclipse自己構建項目,需要自己手動下載依賴包進行依賴。
樣本程式:
1.將JSON組裝的實體資料類型轉換為Java中對應的簡單Bean對象(只包含簡單的資料類型)
/** * 將json格式封裝的簡單實體類型資料轉換成簡單類型的javabean * @return */private static Object JSON2SimpleBean() {String jsonStr = "{\"age\":23,\"id\":123,\"name\":\"tt_2009\"," +"\"province\":\"上海\",\"sex\":\"男\"}";JSONObject jsonBean = JSONObject.fromObject(jsonStr);return JSONObject.toBean(jsonBean, SimpleUser.class);}
以上代碼是將Json資料串轉換成java中自訂的對應的簡單bean。SimpleUser看最後代碼附錄。
2.將JSON組裝的複雜資料轉換成複雜的java資料實體(對象中包含其它複雜物件,如收貨地址用List儲存)
/** * 將json格式封裝的複雜實體資料轉換成複雜類型的javabean * @return */private static Object JSON2ComplexBean() {String jsonStr = "{\"address\":[\"北京\",\"上海\",\"廣州\"]," +"\"age\":23,\"id\":123,\"name\":\"tt_2009\",\"province\":\"上海\",\"sex\":\"男\"}";JSONObject jsonBean = JSONObject.fromObject(jsonStr);return JSONObject.toBean(jsonBean, ComplexUser.class);}
以上代碼將json組裝的資料串轉換成java中自訂的複雜資料實體。ComplexUser看最後附錄代碼。
3.將Json資料轉換成java中的List
/** * 將json格式封裝的列表資料轉換成java的List資料 * @return */private static Object JSON2List() {String jsonArray ="[{\"age\":23,\"id\":123,\"name\":\"tt_2009_0\",\"province\":\"上海\",\"sex\":\"男\"}," +"{\"age\":24,\"id\":123,\"name\":\"tt_2009_1\",\"province\":\"上海\",\"sex\":\"男\"}," +"{\"age\":32,\"id\":123,\"name\":\"tt_2009_9\",\"province\":\"上海\",\"sex\":\"男\"}]";return JSONArray.toList(JSONArray.fromObject(jsonArray), new SimpleUser(), new JsonConfig());}
以上代碼將json組裝的資料資料轉換成java中的list資料。對更複雜的資料處理,後續文章介紹,比如處理日期等格式的資料。
4.將json資料轉換成java中的Map。(注意key只能是字串)
/** * 將json格式封裝的字串資料轉換成java中的Map資料 * @return */private static Map<String, SimpleUser> JSON2Map() {Map<String, SimpleUser> map = new HashMap<String, SimpleUser>();String jsonMapStr ="{\"tt_2009_4\":{\"age\":27,\"id\":123,\"name\":\"tt_2009_4\",\"province\":\"上海\",\"sex\":\"男\"}," +"\"tt_2009_6\":{\"age\":29,\"id\":123,\"name\":\"tt_2009_6\",\"province\":\"上海\",\"sex\":\"男\"}," +"\"tt_2009_0\":{\"age\":23,\"id\":123,\"name\":\"tt_2009_0\",\"province\":\"上海\",\"sex\":\"男\"}}";JSONObject jsonMap = JSONObject.fromObject(jsonMapStr);Iterator<String> it = jsonMap.keys();while(it.hasNext()) {String key = (String) it.next();SimpleUser u = (SimpleUser) JSONObject.toBean(JSONObject.fromObject(jsonMap.get(key)),SimpleUser.class);map.put(key, u);}return map;}
以上實現的是將json組裝的key-value格式的資料轉換成java中的map。
附錄代碼:
(setter、getter等方法省略掉了)
/** * 只包含基礎資料型別 (Elementary Data Type)的簡單實體類 * @author TT_2009 */public class SimpleUser {private int id;private String name;private String sex;private int age;private String province;}
/** * 包含複雜類型的實體類 * @author TT_2009 */public class ComplexUser extends SimpleUser {private List<String> address;public ComplexUser() {}public ComplexUser(int id, String name,String sex, int age, String province,List<String> address) {super(id, name, sex, age, province);this.address = address;}public List<String> getAddress() {return address;}public void setAddress(List<String> address) {this.address = address;}}