FastJson 常見問題

1、場景javascript

在使用序列化的時候,Object裏包含了兩個如出一轍的對象,因此解析的時候,只有第一個能解析出來,另一個沒法顯示。php

查看了json的序列化源碼,發現是DisableCircularReferenceDetecte特性,防止對象互相引用,致使死循環的解析。css

可使用String jsonString = JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect )來解決。java

 

2、上網搜了資料,才發現fastjson有不少常見的問題,轉載自https://my.oschina.net/zhongwenhao/blog/212101git

1. fastjson主要的API哪些?

fastjson入口類是com.alibaba.fastjson.JSON,主要的API是JSON.toJSONString,和parseObject。github

package com.alibaba.fastjson; public abstract class JSON { public static final String toJSONString(Object object); public static final <T> T parseObject(String text, Class<T> clazz, Feature... features); }

序列化:json

String jsonString = JSON.toJSONString(obj);

反序列化:api

VO vo = JSON.parseObject("...", VO.class);

泛型反序列化:瀏覽器

import com.alibaba.fastjson.TypeReference;

  List<VO> list = JSON.parseObject("...", new TypeReference<List<VO>>() {});

2. fastjson的性能如何?

fastjson是目前java語言中最快的json庫,比自稱最快的jackson速度要快,第三方獨立測試結果看這裏:https://github.com/eishay/jvm-serializers/wiki/Staging-Results 。jvm

自行作性能測試時,關閉循環引用檢測的功能。

JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect) VO vo = JSON.parseObject("...", VO.class, Feature.DisableCircularReferenceDetect)

這裏有jackson做者cowtowncoder等人對fastjson的性能評價: https://groups.google.com/forum/#!topic/java-serialization-benchmarking/8eS1KOquAhw

3. fastjson性能比gson怎樣?

fastjson比gson快大約6倍,測試結果上這裏:https://github.com/eishay/jvm-serializers/wiki/Staging-Results 。gson的g多是「龜」拼音的縮寫,龜速的json庫。

4. fastjson序列化的須要像json-lib同樣配置java bean的序列化麼?

不須要,fastjson的序列化和反序列化都不須要作特別配置,惟一的要求是,你序列化的類符合java bean規範。

5. fastjson如何處理日期

fastjson處理日期的API很簡單,例如:

JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss.SSS")

使用ISO-8601日期格式

JSON.toJSONString(obj, SerializerFeature.UseISO8601DateFormat);

全局修改日期格式

JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd"; JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);

反序列化可以自動識別以下日期格式:

  • ISO-8601日期格式
  • yyyy-MM-dd
  • yyyy-MM-dd HH:mm:ss
  • yyyy-MM-dd HH:mm:ss.SSS
  • 毫秒數字
  • 毫秒數字字符串
  • .NET JSON日期格式
  • new Date(198293238)

6. 如何定製序列化?

你可使用SimplePrePropertyFilter過濾字段,詳細看這裏:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=7673519

關於定製序列化,詳細的介紹看這裏: https://github.com/alibaba/fastjson/wiki/%E5%AE%9A%E5%88%B6%E5%BA%8F%E5%88%97%E5%8C%96

7. 當對象存在引用是,序列化後的結果瀏覽器不支持,怎麼辦?

使用SerializerFeature.DisableCircularReferenceDetect特性關閉引用檢測和生成。例如:

String jsonString = JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect );

8. IE 6不支持JSON帶中文字符串,要怎麼處理?

fastjson提供了BrowserCompatible這個配置,打開以後,全部的中文都會序列化爲\uXXXX這種格式,字節數會多一些,可是能兼容IE 6。

String jsonString = JSON.toJSONString(obj, SerializerFeature.BrowserCompatible );

9. fastjson 如何處理超大對象和超大JSON文本

fastjson提供了Stream API,詳細看這裏 https://github.com/alibaba/fastjson/wiki/Stream-api

相關文章
相關標籤/搜索