本篇文章主要介紹了java中fastjson產生和解析json資料(序列化和反序列化資料),具有一定的參考價值,有興趣的小夥伴們可以參考一下。
本文講解2點:
1.fastjson產生與解析json資料
(範例:4種常用類型:JavaBean,List36ee8f7418bd46bbf580ced6560b65cf,Listf7e83be87db5cd2d9a8a0b8117b38cd4,Lista06c5c2dfccfdea21bf0b155d9343663)
2.透過一個android程式測試fastjson的用法。
fastjson簡介:
Fastjson是一個由Java語言編寫的高效能功能完善的JSON函式庫。 fastjson採用獨創的演算法,將parse的速度提升到極致,超過所有json庫,包括曾經號稱最快的jackson。並且也超越了google的二進位協定protocol buf。 Fastjson完全支援http://www.php.cn/的標準,也是官方網站收錄的參考實作之一。支援各種JDK類型。包括基本型別、JavaBean、Collection、Map、Enum、泛型等。支援JDK 5、JDK 6、Android、阿里雲手機等環境。
一. fastjson產生json字串(JavaBean,List36ee8f7418bd46bbf580ced6560b65cf,Listf7e83be87db5cd2d9a8a0b8117b38cd4,Lista06c5c2dfccfdea21bf0b155d9343663)
,Lista06c5c2dfccfdea21bf0b155d9343663)
#String jsonStrng = JSON.toJSONString(object);
二. fastjson 解析json字串為四種型別
##1. JavaBeanPerson person = JSON.parseObject(jsonString, Person.class);2. List36ee8f7418bd46bbf580ced6560b65cf
List<Person> listPerson =JSON.parseArray(jsonString, Person.class);3. Listf7e83be87db5cd2d9a8a0b8117b38cd4
List<String> listString = JSON.parseArray(jsonString, String.class);4. Lista06c5c2dfccfdea21bf0b155d9343663>
##複製程式碼
List<Map<String, Object>> listMap = JSON.parseObject(jsonString, new TypeReference<List<Map<String,Object>>>(){});(註:此處可看出fastjson反射機制比gson更準確, id = 1001 透過fastjson反射仍是id = 1001 , 而透過gson反射結果為id =1001.0 ,
JSON解析器fastjson(阿里巴巴出品,版本1.1.26),如果定義了JSONObject為{"JACKIE_ZHANG":"張學友","ANDY_LAU":"劉德華","LIMING":"黎明","Aaron_Kwok":"郭富城"},那麼讀取值時,KEY順序無序,測試程式碼:
##
import comalibabafastjsonJSONObject; /** * Created by wangzhenfei on 14-4- */ public class FastJsonTest { public static void main(String[] args){ String jsonStr = "{\"JACKIE_ZHANG\":\"张学友\",\"ANDY_LAU\":\"刘德华\",\"LIMING\":\"黎明\",\"Aaron_Kwok\":\"郭富城\"}" ; //做5次测试 for(int i=0,j=5;i<j;i++) { JSONObject jsonObject = JSONObjectparseObject(jsonStr) ; for(javautilMapEntry<String,Object> entry:jsonObjectentrySet()){ Systemoutprint(entrygetKey()+"-"+entrygetValue()+"\t"); } Systemoutprintln();//用来换行 } } }執行結果:
LIMING-黎明 Aaron_Kwok-郭富城JACKIE_ZHANG-张学友ANDY_LAU-刘德华 Aaron_Kwok-郭富城 ANDY_LAU-刘德华LIMING-黎明JACKIE_ZHANG-张学友 Aaron_Kwok-郭富城 JACKIE_ZHANG-张学友ANDY_LAU-刘德华LIMING-黎明 LIMING-黎明 ANDY_LAU-刘德华JACKIE_ZHANG-张学友Aaron_Kwok-郭富城 JACKIE_ZHANG-张学友 LIMING-黎明ANDY_LAU-刘德华Aaron_Kwok-郭富城解決方法:定義為JSONArray,程式碼如下:
import comalibabafastjsonJSONArray; /** * Created by wangzhenfei on 14-4- */ public class FastJsonTest { public static void main(String[] args){ String jsonStr = "[{\"JACKIE_ZHANG\":\"张学友\"},{\"ANDY_LAU\":\"刘德华\"},{\"LIMING\":\"黎明\"},{\"Aaron_Kwok\":\"郭富城\"}]" ; //做5次测试 for(int i=0,j=5;i<j;i++) { JSONArray jsonArray = JSONArrayparseArray(jsonStr); for(int k=0;k<jsonArraysize();k++){ Systemoutprint(jsonArrayget(k) + "\t"); } Systemoutprintln();//用来换行 } } }執行結果為:# #
{"JACKIE_ZHANG":"张学友"} {"ANDY_LAU":"刘德华"}{"LIMING":"黎明"}{"Aaron_Kwok":"郭富城"} {"JACKIE_ZHANG":"张学友"} {"ANDY_LAU":"刘德华"}{"LIMING":"黎明"}{"Aaron_Kwok":"郭富城"} {"JACKIE_ZHANG":"张学友"} {"ANDY_LAU":"刘德华"}{"LIMING":"黎明"}{"Aaron_Kwok":"郭富城"} {"JACKIE_ZHANG":"张学友"} {"ANDY_LAU":"刘德华"}{"LIMING":"黎明"}{"Aaron_Kwok":"郭富城"} {"JACKIE_ZHANG":"张学友"} {"ANDY_LAU":"刘德华"}{"LIMING":"黎明"}{"Aaron_Kwok":"郭富城"}
如果就想要定義為JSONObject,而不是JSONArray,可以選用其他JSON解析器,個人推薦使用google的gson,文檔明顯比fastjson好很多(從這裡可以看出阿里巴巴與Google的差距):
import comgooglegsonJsonElement; import comgooglegsonJsonObject; import comgooglegsonJsonParser; /** * Created by wangzhenfei on 14-4- */ public class FastJsonTest { public static void main(String[] args){ String jsonStr = "{\"JACKIE_ZHANG\":\"张学友\",\"ANDY_LAU\":\"刘德华\",\"LIMING\":\"黎明\",\"Aaron_Kwok\":\"郭富城\"}" ; //做5次测试 for(int i=0,j=5;i<j;i++) { JsonObject jsonObject = (JsonObject) new JsonParser()parse(jsonStr); for(javautilMapEntry<String,JsonElement> entry:jsonObjectentrySet()){ Systemoutprint(entrygetKey()+"-"+entrygetValue()+"\t"); } Systemoutprintln();//用来换行 } } }
運行結果:
JACKIE_ZHANG-"张学友" ANDY_LAU-"刘德华" LIMING-"黎明" Aaron_Kwok-"郭富城" JACKIE_ZHANG-"张学友" ANDY_LAU-"刘德华" LIMING-"黎明" Aaron_Kwok-"郭富城" JACKIE_ZHANG-"张学友" ANDY_LAU-"刘德华" LIMING-"黎明" Aaron_Kwok-"郭富城" JACKIE_ZHANG-"张学友" ANDY_LAU-"刘德华" LIMING-"黎明" Aaron_Kwok-"郭富城" JACKIE_ZHANG-"张学友" ANDY_LAU-"刘德华" LIMING-"黎明" Aaron_Kwok-"郭富城"
以上是詳細介紹java中fastjson產生和解析json資料(序列化和反序列化資料)的詳細內容。更多資訊請關注PHP中文網其他相關文章!