亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

對Java中JSON解析器的一些見解

2019-11-26 15:52:12
字體:
來源:轉載
供稿:網友

最近在研究JSON,Java中有很多處理JSON的類庫,lib-json、sf-json、fastjson還有Jackson Json。第一個就不說了,性能和功能都沒有什么亮點。


sf-json最大的優點就是隨機讀取方便。代碼很簡單:

JSONObject json= JSONObject.fromObject(str);

然后讀取字段內容:

json.getString或者getInt之類的。但是工作效率有待商榷,而且容易出錯。

另外sf-json還有個優點就是自動使用unicode編碼,當內容中出現中文或者符號的時候會自動將其轉換為/uFFFF這樣的unicode編碼。這樣即便是在web服務器端的response中沒有設置編碼,直接推送json也不會出現亂碼問題。


fastjson,顧名思義就是快。網上已經有很多性能對比的數據了,我就不多說其性能了。

這里要說的就是它的功能性問題。可能是定位不一樣,最初fastjson就是要快,因此在對象的序列化與反序列化上下了很大功夫。但是在功能上有所缺乏。

不知在哪個版本開始加上了key按字典排序的功能。但是貌似這個功能沒有辦法關閉。有些時候我是不希望字段順序被打亂的,這個問題就無法解決。

我使用的fastjson版本為1.1.14。另外fastjson還有一些bug沒有解決,而且是比較明顯的bug。例如在@JsonField注解中format參數,這個是用來指定Date類型數據如何序列化的。如果你使用英文或符號,OK,沒有問題(例如yyyy-MM-dd),但是格式中一旦出現中文就會出錯(例如yyyy年MM月dd日)。而且經過實驗,所有的注解都要放在屬性的Getter(就是getXXX()方法)上,直接放在屬性上是無法工作的。在eclipse中,一般我們都是直接寫屬性,屬性寫完后用自動生成的方式生成Getter和Setter方法。如果今后該類的屬性發生變化了,個人更傾向于直接刪除所有Getter和Setter,然后重新生成。那么假如把注解全放到Getter上面,我刪的時候就要非常小心。

再有一個比較致命的就是文檔。幾乎找不到全面的文檔來介紹或支持fastjson。整個項目都由一個名為“溫少”的人來負責,存在很多不確定的因素。


經過個人的評估,我更傾向于使用Jackson Json。首先說文檔,Jackson Json官方網站上對每一個版本都有詳盡的文檔(http://jackson.codehaus.org/)。另外Jackson Json的序列化與反序列化速度也并不見得有多慢。更重要的是它的注解支持要好于fastjson。就拿剛才說到的key按字典排序的功能吧,可以在實體類上直接加上@JsonPropertyOrder(alphabetic=false)注解就可以關閉排序功能。而對于其他功能的注解支持也很好。

例如Date的序列與反序列化注解支持

@JsonSerialize(using=DateSerializer.class)
@JsonDeserialize(using=DateDeserializer.class)
private Date birthday;

這樣就能指定對birthday字段的序列化與反序列化方法。另外,這兩個注解都直接放在了屬性上,沒有放在Getter上。

針對上面的兩個注解,我的序列化器是這樣寫的

public class DateSerializer extends JsonSerializer<Date>

繼承了JsonSerializer,泛型中指定了序列化類型為Date,然后重寫如下方法

@Override
public void serialize(Date date, JsonGenerator gen, SerializerProvider provider) throws IOException, JsonProcessingException

方法中傳進來的date就是將要被序列化的數據,接下來你可以任意展示該數據,在退出該方法之前使用gen.writeString(formattedDate);來完成序列化就可以了。

類似地,我的反序列化器是這樣寫的:

public class DateDeserializer extends JsonDeserializer<Date>

繼承了JsonDeserializer,泛型中指定了反序列化類型為Date,然后重寫如下方法

@Override
public Date deserialize(JsonParser parser, DeserializationContext context)throws IOException, JsonProcessingException {

這里面方法的返回值就是反序列化后的最終內容。方法內部你可以使用parser.getText()來獲取到當前要處理的內容。你可以隨便折騰里面的數據,只需要最后返回你想要的Date就可以了。


另外在制作基于Jackson Json的Service時想使用泛型的思想來寫一個接口,最終目的就是希望方法能隨著參數類型不同,返回值的類型也隨之不同。以前很少寫泛型的方法,這個問題雖然基礎,但是難住了我,經過查看Jackson Json的源代碼,我得到了啟示,像下面這樣寫就OK了:

public <T> T strToObj(String jsonStr, Class<T> clazz)


這樣寫就可以了。假設我有一個Result類型的對象需要反序列化,當前已經有了一個json字符串jsonStr,那么我只需要指定第二個參數clazz就可以直接得到Result類型的對象了:

Result newResult= jsonProcessService.strToObj(jsonStr, Result.class);


這樣就不用在方法前加入(Result)類型強制轉換了。


上面只是我的一些拙見,還請同仁們多多指教。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久久国产| 久久天天躁狠狠躁夜夜爽蜜月| 精品一区二区三区三区| 精品久久久久久国产| 欧洲成人免费视频| 色综合91久久精品中文字幕| 久久深夜福利免费观看| 2019中文字幕在线观看| 日韩中文字幕在线精品| 久久精品国产亚洲一区二区| 日韩中文字在线| 色爱av美腿丝袜综合粉嫩av| 日本欧美爱爱爱| 欧美激情区在线播放| 日韩高清av一区二区三区| 亚洲综合av影视| 久久久久久国产三级电影| xxx欧美精品| 日韩欧美国产黄色| 亚洲三级免费看| 午夜免费在线观看精品视频| 久久久久中文字幕2018| 成人免费观看49www在线观看| 亚洲午夜未满十八勿入免费观看全集| 91免费综合在线| 日本精品视频在线| 欧美在线视频一区二区| 亚洲国产欧美一区二区三区同亚洲| 国产视频久久久久| 亚洲欧美日韩精品久久| 亚洲欧洲日产国码av系列天堂| 欧美最猛黑人xxxx黑人猛叫黄| 97在线免费视频| 久久精品视频在线观看| 97精品国产aⅴ7777| 午夜精品久久久久久久久久久久| 91情侣偷在线精品国产| 亚洲免费成人av电影| 亚洲国产精品一区二区久| 亚洲黄色av网站| 日本高清+成人网在线观看| 一区二区三区视频免费在线观看| 欧美日韩在线影院| 亚洲精品91美女久久久久久久| 亚洲欧美精品伊人久久| 亚洲成人网在线| 久久久爽爽爽美女图片| 精品伊人久久97| 亚洲免费视频观看| 国产精品久久久久久久久久久久久久| 欧美性在线视频| 国产精品扒开腿做| 精品亚洲一区二区三区在线播放| 久久久精品电影| 国产精品中文在线| 精品中文字幕视频| 日韩激情在线视频| 日韩在线视频网站| 日韩欧美亚洲国产一区| 日韩av一区二区在线观看| 亚洲三级免费看| 懂色av一区二区三区| 一本大道香蕉久在线播放29| 555www成人网| 精品无人区乱码1区2区3区在线| 亚洲欧美中文日韩在线v日本| 欧美性极品少妇精品网站| 亚洲成色777777女色窝| 国产国语刺激对白av不卡| 国内外成人免费激情在线视频| 国产欧美一区二区三区四区| 欧美激情视频在线免费观看 欧美视频免费一| 欧美日韩久久久久| 一本色道久久综合狠狠躁篇怎么玩| 欧美在线一区二区三区四| 国产精品久久久久久久久久久不卡| 久久精品视频中文字幕| 国产精品久久久久久av| 日韩中文字幕精品| 国产在线播放91| 亚洲精品欧美日韩| 国产一区二区三区在线播放免费观看| 欧美在线视频a| 成人免费激情视频| 国产一级揄自揄精品视频| 亚洲精品www久久久久久广东| 久久偷看各类女兵18女厕嘘嘘| 国产精品高潮在线| 精品国产福利在线| 青青久久av北条麻妃海外网| 国产91精品视频在线观看| 日韩欧美国产中文字幕| 成人激情视频在线| 亚洲一区第一页| 97avcom| 亚洲成av人片在线观看香蕉| 欧美丰满少妇xxxxx做受| 欧美日韩裸体免费视频| 日韩在线观看免费全集电视剧网站| 亚洲欧美日韩爽爽影院| 欧美在线免费观看| 欧美激情中文字幕乱码免费| 欧美性猛交xxx| 亚洲精品久久久久久久久久久久久| 国产女人精品视频| 日韩精品亚洲视频| 亚洲精品成人久久| 自拍亚洲一区欧美另类| 国产精品自产拍在线观看中文| 97精品欧美一区二区三区| 亚洲国语精品自产拍在线观看| 91精品久久久久久久| 日韩中文av在线| 精品久久久国产精品999| 亚洲人线精品午夜| 欧美黑人一级爽快片淫片高清| 国产精品综合不卡av| 国产精品久久中文| 亚洲国产天堂网精品网站| 精品亚洲一区二区三区| 亚洲性69xxxbbb| 欧美大学生性色视频| 91影院在线免费观看视频| www.久久久久| 日韩av色在线| 亚洲福利视频网| 国产欧美欧洲在线观看| 国产精品丝袜高跟| 亚洲精品女av网站| 日韩成人av在线| 日韩电影在线观看中文字幕| 久久久久久久久久久成人| 中文字幕日本精品| 日本精品性网站在线观看| 国产成人拍精品视频午夜网站| 国产精品永久在线| 国产又爽又黄的激情精品视频| 国产精品国产三级国产aⅴ浪潮| 日韩欧美精品在线观看| 久久久人成影片一区二区三区| 一区二区三区精品99久久| 日韩亚洲一区二区| 91av在线播放| 欧美激情亚洲自拍| 亚洲国产欧美一区二区三区同亚洲| 国产精品旅馆在线| 96sao精品视频在线观看| 国产精品久久久久久久久久新婚| 91国内产香蕉| 亚洲黄色片网站| 久久6精品影院| 国产午夜精品一区理论片飘花| 第一福利永久视频精品| 久久最新资源网| 最近2019好看的中文字幕免费| 久久精品一本久久99精品| 国产+成+人+亚洲欧洲| 亚洲三级免费看| 成人久久18免费网站图片| 亚洲成人网久久久| 久久精品91久久香蕉加勒比| 欧美小视频在线观看| 亚洲激情在线观看| 国外成人在线播放|