.org.JSON
.net.sf.JSON
還有一種是google的,很少聽人在討論
這兩種的類別名稱很多都一模一樣,但用法不見得相同
java聽說要到JAVA9,預計2016年9月才有內建JSON,也不知是哪一種JSON
※net.sf.JSON
尤於官方網站已寫的很清楚,且英文不難,一進去就會看到型態對應和要有的jar檔左邊Getting Started裡面有教怎麼寫,而Javadoc為API
如果是maven下載,可來這裡
※org.JSON
首先要下載,可參考我的這篇文章或者用maven下載在這裡選其中一個版本
尤於我本來是下載2015的版本,但是執行時出「java.lang.UnsupportedClassVersionError: org/json/JSONObject : Unsupported major.minor version 52.0」的錯,可能是java7或8的關係,所以只好降版了,用的是如下的版本
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20140107</version> </dependency>
※JSONObject和JSONArray
// 像Map的JSONObject JSONObject jObj = new JSONObject(); jObj.put("A", "1"); jObj.put("B", 2); jObj.put("C", 3.3); jObj.put("D", '4');// 不會轉為ASCII jObj.put("E", true); System.out.println(jObj);// {"D":52,"E":true,"A":"1","B":2,"C":3.3} System.out.println(jObj.get("B"));// 2 // 像List的JSONArray JSONArray jArray = new JSONArray(); jArray.put("F"); jArray.put(5); jArray.put(6.6); jArray.put('7');// ASCII為55,會轉為55 jArray.put(false); System.out.println(jArray);// ["F",5,6.6,55,false] System.out.println(jArray.get(3));// 55
※加入Collection
// 增加Collection Map<String, Object> map = new HashMap<>(); map.put("AA", "1"); map.put("BB", 1); map.put("CC", 1.1); map.put("DD", '1'); map.put("EE", false); List<Object> list = new ArrayList<>(); list.add("2"); list.add(2); list.add(2.2); list.add('2'); list.add(true); Set<Object> set = new HashSet<>(); set.add("3"); set.add(3); set.add(3.3); set.add('3'); set.add(false); JSONObject jObj = new JSONObject(); JSONArray jArray = new JSONArray(); System.out.println("JSONArray裡面放Collection"); jArray.put(map); jArray.put(list); jArray.put(set); System.out.println(jArray);// [{"AA":"1","BB":1,"CC":1.1,"DD":"1","EE":false},["2",2,2.2,"2",true],["3","3",false,3,3.3]] System.out.println("JSONObject裡面放Collection"); jObj.put("MapOfObj", map); jObj.put("ListOfObj", list); jObj.put("SetOfObj", set); System.out.println(jObj);// {"SetOfObj":["3","3",false,3,3.3],"ListOfObj":["2",2,2.2,"2",true],"MapOfObj":{"AA":"1","BB":1,"CC":1.1,"DD":"1","EE":false}}
※JSONObject放JSONArray和JSONArray放JSONObject
JSONObject jObj = new JSONObject(); jObj.put("A", "1"); jObj.put("B", 2); jObj.put("C", 3.3); jObj.put("D", '4');// 不會轉為ASCII jObj.put("E", true); JSONArray jArray = new JSONArray(); jArray.put("F"); jArray.put(5); jArray.put(6.6); jArray.put('7');// ASCII為55,會轉為55 jArray.put(false); // 以下兩組擇其一,否則會StackOverflowError(死循環) jObj.put("ObjAll", jArray); System.out.println(jObj);// {"D":52,"E":true,"A":"1","B":2,"C":3.3,"ObjAll":["F",5,6.6,55,false]} System.out.println(jObj.getJSONArray("ObjAll"));// ["F",5,6.6,55,false] jArray.put(jObj); System.out.println(jArray);// ["F",5,6.6,55,false,{"D":52,"E":true,"A":"1","B":2,"C":3.3}]
※JSONObject和JSONArray的建構子
Map<String, Object> map = new HashMap<>(); map.put("AA", "1"); map.put("BB", '1'); List<Object> list = new ArrayList<>(); list.add("2"); list.add('2'); Set<Object> set = new HashSet<>(); set.add("3"); set.add('3'); System.out.println(new JSONObject(map));// {"AA":"1","BB":"1"} System.out.println(new JSONObject(list));// {"empty":false} System.out.println(new JSONObject(set));// {"empty":false} // System.out.println(new JSONArray(map)); System.out.println(new JSONArray(list));// ["2","2"] System.out.println(new JSONArray(set));// ["3","3"] //直接塞List或Set不會轉成ASCII Code
※JSONObject類似Map,所以給list和set,不知要顯示什麼,所以會出現這個預設值
※同樣的JSONArray類似List,所以給Map,不知要顯示什麼,所以會出「org.json.JSONException: JSONArray initial value should be a string or collection or array.」的例外
沒有留言:
張貼留言