1. 程式人生 > 其它 >java中使用JSON工具處理數字null空

java中使用JSON工具處理數字null空

技術標籤:javajavajson後端spring

目錄

前言

1. 缺點:

2. 優點:

3.差異區別:

4. 處理物件中的空null:

5. 分別解決物件中的空null:

net.sf.json工具包:

fastjson 工具包:


前言

作者常用的有兩個:

1. json-lib

maven引入方式:

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>

</dependency>

2. fastjson

maven引入方式:

<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
</dependency>

這兩個工具包都可以進行json相關的轉換等處理;當然也還有其他兩個大家熟知的工具包 Gson和jackson,這兩個其實現在都比json-lib好;Gson完全可以將複雜的物件進行正確的轉換,從功能上來說個人感覺是最好的,而jackson其實在轉換複雜物件的也同樣會存在一些問題。

1. 缺點:

json-lib:

①. 處理速度慢

②. 如果一個類裡面會出現另一個類的list或者map集合,json-lib從json到bean的轉換就會出現問題

③.依賴於很多第三方包:commons-lang-2.6,commons-beanutils,commons-collections-3.2,commons-logging-1.1.1,ezmorph-1.0.6

fastjson:

①. 複雜型別的Bean轉換Json上會出現一些問題,可能會出現引用的型別,導致Json轉換出錯,需要制定引用

②. 日期的處理有bug

2. 優點:

json-lib:

對於目前網際網路應用來說,其實個人感覺沒啥優點了。

fastjson:

①.採用獨創的演算法,速度快(其實也正因為這個,內部處理不完善,才會出現日期等轉換的缺陷)

②. 無依賴,可直接在JDK執行

3.差異區別:

物件轉為json的時候:

net.sf.json 工具包使用 JSONObject.fromObject(obj)。

fastjson 工具包使用JSONObject.parseObject(str)。

json轉物件的時候:

net.sf.json 工具包使用 JSONObject.toBean(obj) 與 JSONObject.toBean(obj, class)。

fastjson 工具包使用JSONObject.toJavaObject(json, class) 與JSONObject.parseObject(str, class)。

fastjson還可以使用 toJSONString將物件轉換為String字串

4. 處理物件中的空null:

net.sf.json工具包會將字串型別轉換為JSONNull格式的null,將數字型別轉換為0 與 0.0。

fastjson 工具包會從結果中直接排除為空null的物件屬性

5. 分別解決物件中的空null:

net.sf.json工具包:

可以定義一個靜態常量,JSONConfig,作為fromObject方法的第二個入參(主要針對數字):

    //定義
    public static final JsonConfig jsonConfig = new JsonConfig();

	static {
		jsonConfig.registerDefaultValueProcessor(Number.class, new DefaultDefaultValueProcessor() {
			@Override
			public Object getDefaultValue(Class type) {
				return null;
			}

		});
	}
    //使用
    JSONObject.fromObject(obj, jsonConfig)

注意:此處可自定義要將空null處理成什麼,如果null則返回的不是null,而是JSONNull,如果要判斷是否為空需要使用ObjectUtils.isnull()方法判斷或者使用getString得到"null"字串進行判斷。

fastjson 工具包:

在轉成json字串的時候,增加入參,SerializerFeature.WriteMapNullValue,這樣轉換後,的結果中就不會排除為空null的物件的屬性,

JSON.parseObject(JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue), class)

此包不存在net.sf.json包的JSONNull的問題。但是對日期的處理有部分缺陷;不過對於日常普通使用是不會有影響的。