JSON 就是一種輕量級的數據交換格式,被普遍應用於 WEB 應用程序開發。採用徹底獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提高網絡傳輸效率。
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 設置某個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