介紹
JSONObject只是一種數據結構,可以理解為JSON格式的數據結構(key-value 結構),可以使用put方法給json對象添加元素。JSONObject可以很方便的轉換成字符串,也可以很方便的把其他對象轉換成JSONObject對象。
JSON(JavaScript Object Notation的首字母縮寫)是一種輕量級數據交換格式,最常用於客戶端 - 服務器通信。它既易於讀/寫,又與語言無關。JSON值可以是另一個JSON 對象,數組,數字,字符串,布爾值(true / false)或null。也是后端開發中經常要接觸的一個一個類,將要數據封裝成json然后傳遞給前端。
依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.46</version> </dependency>
JSONObject的接口
public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler {
1.JSONObject繼承自JSON ,JSON是Fastjson的一個主要類,常常需要調用JSON的兩個方法:toJSONString(Object)【將指定的對象序列化成Json表示形式】和parseObject(String, Class)【將json反序列化為指定的Class模式】
2.JSONObject實現了Map<String, Object>,可見JSONObject是一個Map類型的數據結構,Map接口提供了很多操作map的方法,常用的增刪改查。
3.JSONObject還實現了Cloneable, Serializable, InvocationHandler,說明JSONObject支持拷貝(並且JSONObject重寫了clone方法),支持序列化與反序列化,InvocationHandler是通過一個代理實例零調用處理程序實現的接口,即標記使用Java動態代理機制。JDK文檔指示:每個代理實例都有一個相關的調用處理程序。當一個方法是在一個代理實例調用,調用的方法進行編碼並派遣其調用處理程序的invoke方法。
JSONObject的字段
private static final long serialVersionUID = 1L; private static final int DEFAULT_INITIAL_CAPACITY = 16; private final Map<String, Object> map;
JSONObject有三個字段
1.serialVersionUID(版本標識)是 Java 為每個序列化類產生的版本標識,可用來保證在反序列時,發送方發送的和接受方接收的是可兼容的對象。如果接收方接收的類的 serialVersionUID 與發送方發送的 serialVersionUID 不一致,進行反序列時會拋出 InvalidClassException。序列化的類可顯式聲明 serialVersionUID 的值,如下:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 1L;
當顯式定義 serialVersionUID 的值時,Java 根據類的多個方面(具體可參考 Java 序列化規范)動態生成一個默認的 serialVersionUID 。盡管這樣,還是建議你在每一個序列化的類中顯式指定 serialVersionUID 的值,因為不同的 jdk 編譯很可能會生成不同serialVersionUID 默認值,進而導致在反序列化時拋出 InvalidClassExceptions 異常。所以,為了保證在不同的 jdk 編譯實現中,其 serialVersionUID 的值也一致,可序列化的類必須顯式指定 serialVersionUID 的值。另外,serialVersionUID 的修飾符最好是 private,因為 serialVersionUID 不能被繼承,所以建議使用 private 修飾 serialVersionUID。【以上出自java.io.Serializable doc 文檔】
2.DEFAULT_INITIAL_CAPACITY 默認初始容量,大小為16
3.map,用於存儲的的容器,JSONObject常用的兩種類型,LinkedHashMap(有序)和HashMap類型。默認初始大小為16。
JSONObject的構造器
最重要的構造器是public JSONObject(int initialCapacity, boolean ordered),其他構造器都直接調用此構造器。initialCapacity為初始容量,ordered為map是否有序
//構造容量為16個單位的HashMap作為JSONObject public JSONObject(){ //調用public JSONObject(int initialCapacity, boolean ordered) this(DEFAULT_INITIAL_CAPACITY, false); } //構造自定義Map<String, Object> 容器類型的JSONObject public JSONObject(Map<String, Object> map){ if (map == null) { throw new IllegalArgumentException("map is null."); } this.map = map; } //構造容量為16個單位JSONObject,可選擇器容器是否有序:LinkedHashMap(true)、HashMap(false) public JSONObject(boolean ordered){ this(DEFAULT_INITIAL_CAPACITY, ordered); } //構造自定義初始大小的HashMap類型的JSONObject public JSONObject(int initialCapacity){ this(initialCapacity, false); } public JSONObject(int initialCapacity, boolean ordered){ if (ordered) { map = new LinkedHashMap<String, Object>(initialCapacity); } else { map = new HashMap<String, Object>(initialCapacity); } }
使用事例
//構造容量為16個單位的HashMap作為JSONObject JSONObject jsonObject = new JSONObject(); //構造容量為16個單位JSONObject,可選擇器容器是否有序:LinkedHashMap(true)、HashMap(false) JSONObject jsonObject1 = new JSONObject(true); //構造自定義Map<String, Object> 容器類型的JSONObject Map<String,Object> map = new ConcurrentHashMap<>(16); JSONObject jsonObject2 = new JSONObject(map); //自定義 JSONObject jsonObject3 = new JSONObject(32, false);
JSONObject的方法
JSONObject繼承JSON但未重寫的方法下面暫不列出。
原文:https://blog.csdn.net/Butterfly_resting/article/details/100053544