首頁  >  文章  >  Java  >  詳細介紹java中fastjson產生和解析json資料(序列化和反序列化資料)

詳細介紹java中fastjson產生和解析json資料(序列化和反序列化資料)

黄舟
黄舟原創
2017-03-09 10:04:501871瀏覽

本篇文章主要介紹了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. JavaBean

Person 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn