阿里巴巴之fastjson的簡單總結
阿新 • • 發佈:2018-11-04
今日,公司由於要求寫一個SDK打成jar包,便於以後直接呼叫,因為介面引數要求是json格式的,所以做完之後在這裡就總結一下,和各位道友分享。
首先,我這裡使用的json工具是阿里巴巴的fastjson,maven依賴在這裡:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
其實,平時json的使用也就兩種,1資料轉json; 2.json解析成資料。
由於說明都在程式碼中,所以各位道友只管盡情的享受閱讀程式碼的快感即可。
第一:資料轉json:
package com.google.fastJson; import com.alibaba.fastjson.JSON; import java.util.HashMap; import java.util.Map; /** * 將資料轉換為json資料,使用"JSON.toJSONString(Object obj)"方法; */ public class Demo01 { public static void main(String[] args){ /** * 注意比較下面兩種json資料格式:一種是"{}"形式,另一種是"[{},{}]"的 * 我們可以這樣理解:json的標準資料格式是"{key:value}"的形式. * key,value為json的基礎元素,{}將基礎元素封裝成一個物件,[{},{},...]是將這些物件封裝成一個數組; */ String json01=test01(); System.out.println(json01);//{"name":"zhangsan","age":14} String json02=test02(); System.out.println(json02);//[{"name":"zhangsan","age":11},{"address":"新疆","tel":"13056897412"}] } public static String test01(){ Map<String,Object> map=new HashMap<>(); map.put("name","zhangsan"); map.put("age",14); String jsonStr=JSON.toJSONString(map); return jsonStr; } public static String test02(){ Object[] obj=new Object[2]; Map<String,Object> map1=new HashMap<>(); map1.put("name","zhangsan"); map1.put("age",11); Map<String,Object> map2=new HashMap<>(); map2.put("address","新疆"); map2.put("tel","13056897412"); obj[0]=map1; obj[1]=map2; String jsonStr=JSON.toJSONString(obj); return jsonStr; } }
第二:解析json資料:
package com.google.fastJson; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; /** * 之前講了將資料轉換為json格式,這裡講如何從json資料中獲取資料,即為逆過程。分三種情況: */ public class Demo02 { public static void main(String[] args){ test01(); //結果:年齡=zhangsan,年齡=12 test02(); //姓名=zhangsan,年齡=11,愛好=null 姓名=null,年齡=null,愛好=soccer //name=zhaoyun //age=666 //schoolName=家裡蹲 //schoolCode=110 //mathTecherName=劉備 //mathTeacherAge=54 //englishTeacherName=關羽 //mathTeacherAge=110 test03(); } /** * 第一種情況:簡單物件型別:如"{"name":"zhangsan","age":12}" */ public static void test01(){ //定義一個json字串: String jsonStr="{\"name\":\"zhangsan\",\"age\":12}"; //這裡的\"表示轉義字元; //使用JSON.parseObject(String str)將字串解析為json物件: JSONObject jo=JSON.parseObject(jsonStr); String name=jo.getString("name"); int age=jo.getInteger("age"); System.out.println("年齡="+name+",年齡="+age); } /** * 第二種情況:陣列型別:如: * [{"name":"zhangsan","age":11},{"like":"soccer"}] */ public static void test02(){ //定義一個json字串: String jsonStr="[{\"name\":\"zhangsan\",\"age\":11},{\"like\":\"soccer\"}]"; //使用JSON.parseArray(String str)解析陣列型別的json資料: JSONArray ja=JSON.parseArray(jsonStr); //返回的實際上是一個list容器 //遍歷這個容器 for(int i=0;i<ja.size();i++){ JSONObject jo=ja.getJSONObject(i); System.out.println("姓名="+jo.getString("name")+",年齡="+jo.getInteger("age")+",愛好="+jo.getString("like")); } //或者使用foreach遍歷也可以: for(Object obj:ja){ JSONObject jo=(JSONObject)obj; System.out.println("姓名="+jo.getString("name")+",年齡="+jo.getInteger("age")+",愛好="+jo.getString("like")); } } /** * 第三種情況:比較複雜的json資料格式:例如: * { * "name":"zhaoyun", * "age":666, * "school":{ * "schoolName":"家裡蹲", * "schoolCode":110 * }, * "teacher":[ * { * "mathTecherName":"劉備", * "mathTeacherAge":54 * }, * { * "englishTeacherName":"關羽", * "englishTeacherAge":110 * } * ] * } * */ public static void test03(){ String jsonStr="{\"name\":\"zhaoyun\",\"age\":666,\"school\":{\"schoolName\":\"家裡蹲\",\"schoolCode\":\"110\"},\"teacher\":[{\"mathTecherName\":\"劉備\",\"mathTeacherAge\":54},{\"englishTeacherName\":\"關羽\",\"englishTeacherAge\":110}]}"; JSONObject jo=JSON.parseObject(jsonStr); String name=jo.getString("name"); int age=jo.getInteger("age"); System.out.println("name="+name); System.out.println("age="+age); //這一步注意了: JSONObject jo2=jo.getJSONObject("school"); String schoolName=jo2.getString("schoolName"); int schoolCode=jo2.getInteger("schoolCode"); System.out.println("schoolName="+schoolName); System.out.println("schoolCode="+schoolCode); //這一步更要注意了: JSONArray ja=jo.getJSONArray("teacher"); for(int i=0;i<ja.size();i++){ JSONObject jo3=ja.getJSONObject(i); if(i==0){ String mathTecherName=jo3.getString("mathTecherName"); int mathTeacherAge=jo3.getInteger("mathTeacherAge"); System.out.println("mathTecherName="+mathTecherName); System.out.println("mathTeacherAge="+mathTeacherAge); } if(i==1){ String englishTeacherName=jo3.getString("englishTeacherName"); int englishTeacherAge=jo3.getInteger("englishTeacherAge"); System.out.println("englishTeacherName="+englishTeacherName); System.out.println("mathTeacherAge="+englishTeacherAge); } } } }