Fastjson的經常使用方法總結

JSON簡單介紹
   JSON 就是一種輕量級的數據交換格式,被普遍應用於 WEB 應用程序開發。採用徹底獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提高網絡傳輸效率。
fastjson的使用
  fastjson是阿里巴巴的開源JSON解析庫,它能夠解析JSON格式的字符串,支持將Java Bean序列化爲JSON字符串,也能夠從JSON字符串反序列化到JavaBean。
  在項目中添加fastjson的依賴(maven中央倉庫能夠直接查找到依賴信息)
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.70</version>
</dependency>
json對象與map、java對象、list的相互轉換
public class FastJsonTest {
	public static void main(String[] args) {
		// json字符串
		String json = "{\"code\":\"U0022S00001\",\"fieldName\":null,\"yhzh\":\"620071008398037654\",\"sfzhm\":\"330681199309146269\",\"qysh\":\"9133060231121732XN\",\"email\":\"18325672253@163.com\",\"phone\":\"18312354321\",\"name\":\"數據資源版本\",\"dataSource\":\"資源來源\",\"templateDataId\":3}";
		System.out.println("處理前字段信息: " + json + "\n");
		/*
		 * 1. 字符串 與 json對象 的相互轉換
		 */
		JSONObject jsonObject = JSONObject.parseObject(json);
		System.out.println("字符串轉json對象:" + jsonObject);
		// Feature.OrderedField 能夠固定字段順序,使得轉爲jsonobject以後的字段順序與原來的json字符串一致
		JSONObject jsonObject2 = JSONObject.parseObject(json, Feature.OrderedField);
		System.out.println("字符串轉json對象[固定字段順序]:" + jsonObject2);

		String jsonStr = JSONObject.toJSONString(jsonObject);
		System.out.println("json對象轉字符串 :" + jsonStr);
		// 
		String jsonStr2 = JSONObject.toJSONString(jsonObject, SerializerFeature.WriteMapNullValue);
		System.out.println("json對象轉字符串[保留value爲null的字段] :" + jsonStr2 + "\n");
		
		/*
		 * 2. map 與 jsonobject的轉換
		 */
		Map<String, Object> map = new HashMap<>();
		Set<String> set = jsonObject.keySet();
		for (String key : set) {
			map.put(key, jsonObject.get(key));
		}
		Iterator<Entry<String, Object>> it = jsonObject.entrySet().iterator();
		while (it.hasNext()) {
			Entry<String, Object> entry = it.next();
			map.put(entry.getKey(), entry.getValue());
		}
		System.out.println("jsonobject轉爲 map:" + map);

		String map2str = JSON.toJSONString(map);
		JSONObject map2json = JSONObject.parseObject(map2str);
		System.out.println("map轉jsonobject:" + map2json + "\n");

		/*
		 * 3.javabean 與 jsonobject轉換
		 * java對象須要實現getter/setter方法,不然數據沒法填充
		 * 
		 * fastjson在對java對象進行序列化時,會拋棄值爲null的key;須要設置SerializerFeature序列化屬性
		 * 
		 */
		BaseBean baseBean = JSON.parseObject(json, BaseBean.class);
		System.out.println("jsonobject轉爲java對象:" + baseBean);
		String bean2jsonStr = JSON.toJSONString(baseBean, SerializerFeature.DisableCircularReferenceDetect);
		JSONObject bean2json = JSONObject.parseObject(bean2jsonStr);
		System.out.println("java對象轉爲json對象:" + bean2json + "\n");

		/*
		 * 4. list與json對象轉換 json 轉爲list以後,就是一個數組,再轉換爲json的時候,應轉爲jsonarray.
		 */
		List list = java.util.Arrays.asList(jsonObject);
		List list2 = Collections.singletonList(jsonObject);
		System.out.println("json 轉 list : " + list2);
		String list2jsonStr = JSON.toJSONString(list2);
		JSONArray list2json = JSONArray.parseArray(list2jsonStr);
		System.out.println("list 轉 jsonobject : " + list2json + "\n");
		
//		jsonObject.put("111", null);
//		System.out.println("設置value爲null : " + jsonObject);
	}

	private static class BaseBean {
		private String code;
		private String fieldName;
		private String yhzh;
		private String sfzhm;
		private String qysh;
		private String email;
		private String phone;
		private String name;
		private String dataSource;
		private String templateDataId;

		//省略 getter/setter部分
	}
}
其餘經常使用基本方法以下:

size()   # json對象長度;
isEmpty()   # json對象是否爲空;
containsKey(Object key)   #是否包含某個指定key;
containsValue(Object value);   #是否包含某個指定value;
get(Object key);   # 獲取指定key對應的value
getJSONObject(String key);   # 獲取指定key對應的value,value爲json對象
getJSONArray(String key);   # 獲取指定key對應的value,value爲JSONArray
getBytes(String key);   # 獲取指定key對應value值的byte數組java

put(String key, Object value);   # 設置鍵值對,key不容許重複
clear();   # 清空json對象


JSONObject 本質仍是 map,有與map相同的兩個方法:
Set keySet();   # 獲取key的Set集合
Set<Map.Entry<String, Object>> entrySet();   # 獲取JSONObject的鍵值對集合,經常使用json對象的遍歷。編程

fastjson對於null值的處理

  fastjson 設置某個key的value爲null, 在序列化輸出時,會丟失這個key 。這裏須要時會用 SerializerFeature.WriteMapNullValue 序列化屬性設置,使null值輸出。
SerializerFeature序列化屬性以下:
QuoteFieldNames  # 輸出key時是否使用雙引號,默認爲true
WriteMapNullValue   # 是否輸出值爲null的字段,默認爲false
WriteNullNumberAsZero   # 數值字段若是爲null,輸出爲0,而非null
WriteNullListAsEmpty    # List字段若是爲null,輸出爲[],而非null
WriteNullStringAsEmpty    #字符類型字段若是爲null,輸出爲」「,而非null
WriteNullBooleanAsFalse    # Boolean字段若是爲null,輸出爲false,而非null
json

相關文章
相關標籤/搜索