FastJson:JSON JSONObject JSONArray詳解以及SimplePropertyPreFilter 的介紹

FastJson:JSON JSONObject JSONArray詳解以及SimplePropertyPreFilter 的介紹

FastJson是阿里巴巴開發的一款專門用于Java開發的包,實現Json對象,JavaBean對,Json字符串之間的轉換。


文章目錄

  • FastJson:JSON JSONObject JSONArray詳解以及SimplePropertyPreFilter 的介紹
  • 一、JSON對象介紹
  • 二、FastJson-JSON
  • 三、FastJson-JSONObject
  • 四、FastJson-JSONArray
  • 五、常用方法匯總
    • 常用方法
    • 簡單說一下FastJSON的JSON過濾器


一、JSON對象介紹

JSON的特點如下:

  1. 數據在花括號中。
  2. 數據以"鍵:值"對的形式出現(其中鍵多以字符串形式出現,值可取字符串,數值,甚至其他json對象)。
  3. 每兩個"鍵:值"對以逗號分隔(最后一個"鍵:值"對省略逗號)。

例:

普通Json對象
{"ID": 1001,"name": "張三","age": 24
?}
數組Json對象
[{"ID": 1001, "name": "張三", "age": 24},{"ID": 1002, "name": "李四", "age": 25},{"ID": 1003, "name": "王五", "age": 22}
]復雜Json對象
{"部門名稱":"研發部","部門成員":[{"ID": 1001, "name": "張三", "age": 24},{"ID": 1002, "name": "李四", "age": 25},{"ID": 1003, "name": "王五", "age": 22}],"部門位置":"xx樓21號"
}

二、FastJson-JSON

JSON是一個抽象類并且實現了JSONStreamAware, JSONAware接口,提供了JSON轉換的方法(詳細方法說明看后文)。

JSON多用于JavaBean->JSONString 或者 JSONString->javaJSON

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentEntity {@JSONField(name = "student_name",ordinal = 1)private String name;@JSONField(name = "student_age",ordinal = 2)private Integer age;
}
 @Testpublic void beanJsonTest() {StudentEntity student = StudentEntity.builder().name("張三").age(18).build();String jsonStudentString = JSON.toJSONString(student); //{"student_name":"張三","student_age":18}StudentEntity studentObject = JSON.parseObject(jsonStudentString, StudentEntity.class);  //轉為java對象}

三、FastJson-JSONObject

JSONObject繼承了JSON并實現了Map接口。

底層是個Map集合,多用于操作JSONObject 如取屬性等,Map集合的功能也都有。

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentEntity {@JSONField(name = "student_name",ordinal = 1)private String name;@JSONField(name = "student_age",ordinal = 2)private Integer age;
}
 @Testpublic void beanJsonTest() {StudentEntity student = StudentEntity.builder().name("張三").age(18).build();String jsonStudentString = JSON.toJSONString(student); //{"student_name":"張三","student_age":18}/**Map<String,Object> map = new HashMap<>();map.put("student_name", "李四");map.put("student_age", 19);map.put("date",students);JSONObject jsonObject = new JSONObject(map);**/JSONObject jsonObject = JSONObject.parseObject(jsonStudentString); //{"student_name":"張三","student_age":18}jsonObject.put("student_name", "李四");jsonObject.put("student_age", 19);//{"student_name":"李四","student_age":19}jsonObject.put("date",student);//{"student_name":"張三","student_age":18,"date":[{"student_name":"張三","student_age":18},{"student_name":"張三","student_age":18},{"student_name":"張三","student_age":18}]}//get方法  根據key取出valueStudentEntity date = jsonObject.getObject("date", StudentEntity.class);String studentName = jsonObject.getObject("student_name", String.class);jsonObject.getString("student_name");}

四、FastJson-JSONArray

JSONObject繼承了JSON并實現了List接口。

底層是個ArrayList,多用于用于操作JSONArray 比如遍歷等,通常與JSONObject聯合使用。

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentEntity {@JSONField(name = "student_name",ordinal = 1)private String name;@JSONField(name = "student_age",ordinal = 2)private Integer age;
}
    @Testpublic void twoTest3() {StudentEntity student1 = StudentEntity.builder().name("張三").age(18).build();StudentEntity student2 = StudentEntity.builder().name("張三").age(18).build();StudentEntity student3 = StudentEntity.builder().name("張三").age(18).build();ArrayList<StudentEntity> students = Lists.newArrayList(student1, student2, student3);JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(students));jsonArray.forEach(item -> {String jsonStudentStringItem = JSONObject.toJSONString(item);System.out.println(jsonStudentStringItem);});//{"student_name":"張三","student_age":18}//{"student_name":"張三","student_age":18}//{"student_name":"張三","student_age":18}JSONObject StudentJson = new JSONObject();StudentJson.put("Student",jsonArray);System.out.println(StudentJson.toJSONString());}

在這里插入圖片描述

五、常用方法匯總

常用方法

  /*** FastJson常用方法*/@Testpublic void fastJSONTest() {StudentEntity student = StudentEntity.builder().name("張三").age(18).build();//1.JSON常用方法//1.1  toJSONString :將java對象轉為JSONStringString jsonStudentString = JSON.toJSONString(student);//{"student_name":"張三","student_age":18}//1.2  parseObject :將JSONString轉為java對象StudentEntity studentObject = JSON.parseObject(jsonStudentString, StudentEntity.class);//StudentEntity(name=張三, age=18)// 1.3 JSONtoJSONBytes():將 Java 對象序列化為 JSON 字節數組byte[] jsonStudentStringBytes = JSON.toJSONBytes(student);//[123, 34, 115, 116, 117, 100, 101, 110, 116, 95, 110, 97, 109, 101, 34, 58, 34, 228, 189, 254, 228, 184, 230, 34, 44, 34,115, 116, 117, 100, 101, ]//1.4 JSONparseBytes():將 JSON 字節數組反序列化為 Java 對象StudentEntity studentObject2 = JSON.parseObject(jsonStudentStringBytes, StudentEntity.class);//1.5 JSON.parseObject:將Java對象轉為JSONObjectJSONObject jsonObject = JSON.parseObject(jsonStudentString);//2.JSONObject常用方法 JSONObject繼承了JSON類,并實現了Map接口,所以可以調用JSON類中的方法,并且重寫了Map相關方法//2.1 JSONObject.toJSONString():將JSONObject轉為JSONStringString jsonStudentString2 = jsonObject.toJSONString();//{"student_name":"張三","student_age":18}//2.2 JSONObject.put():根據key設置valuejsonObject.put("STUDENT", StudentEntity.builder().name("王五").age(22).build());//{"student_name":"張三","student_age":18,"STUDENT":{"student_name":"王五","student_age":22}}//2.3 JSONObject.getXxx():根據key取出valueString studentName = jsonObject.getString("student_name");//張三Integer studentAge = jsonObject.getInteger("student_age");//18/* String name = jsonObject.getObject("name", String.class);Integer age = jsonObject.getObject("age", Integer.class);*/StudentEntity studentObject3 = jsonObject.getObject("STUDENT", StudentEntity.class);//StudentEntity(name=王五, age=22)//2.4 toJavaObject:將JSONObject轉為Java對象StudentEntity javaObject = jsonObject.toJavaObject(StudentEntity.class);//2.5 putAll():合并兩個JSONObjectString json1 = "{\"name\":\"Jack\"}";String json2 = "{\"age\":35}";JSONObject jsonObject1 = JSON.parseObject(json1);JSONObject jsonObject2 = JSON.parseObject(json2);JSONObject jsonObject3 = new JSONObject();jsonObject3.putAll(jsonObject1);jsonObject3.putAll(jsonObject2);//{"name":"Jack","age":35}//2.6 isEmpty():判斷JSONObject是否為空boolean empty = jsonObject.isEmpty();//containsKey() keySet() vlues() clear() remove() containsValue() 跟Map集合的方法一樣 不在列舉//3.JSONArray常用方法//3.1. parseArray:將Java對象轉為JSONArrayStudentEntity student1 = StudentEntity.builder().name("張三1").age(18).build();StudentEntity student2 = StudentEntity.builder().name("張三2").age(18).build();StudentEntity student3 = StudentEntity.builder().name("張三3").age(18).build();ArrayList<StudentEntity> studentEntities = Lists.newArrayList(student1, student2, student3);JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(studentEntities));//[{"student_name":"張三1","student_age":18},{"student_name":"張三2","student_age":18},{"student_name":"張三3","student_age":18}]//3.2. toJSONString():將JSONArray轉為JSONStringString jsonArrayString = jsonArray.toJSONString();//"[{"student_name":"張三1","student_age":18},{"student_name":"張三2","student_age":18},{"student_name":"張三3","student_age":18}]//3.3. toJavaObject():將JSONArray轉為Java對象List<StudentEntity> studentEntities1 = jsonArray.toJavaList(StudentEntity.class);// forEach(),fparallelStream(),stream(),spliterator(),iterator(),sort(),get()這些Arraylist方法同樣都有,不在列舉}

簡單說一下FastJSON的JSON過濾器

SimplePropertyPreFilter 簡單過濾器

class Person {public String name;public int age;
}
@Testpublic void toJSONStringWithFilterExample() {Person person = new Person();person.name = "Eve";person.age = 40;// SimplePropertyPreFilter類 實現 JSON字符串過濾SimplePropertyPreFilter simplePropertyPreFilter1 = new SimplePropertyPreFilter();//添加過濾字段simplePropertyPreFilter1.getExcludes().add("age");//不包括 "age" 字段//調用toJSONString將Java轉String時傳入過濾器System.out.println(JSON.toJSONString(person, simplePropertyPreFilter1));//{"name":"Eve"}//或者SimplePropertyPreFilter simplePropertyPreFilter2 = new SimplePropertyPreFilter();//添加保留字段simplePropertyPreFilter2.getIncludes().add("name");//包括 "name" 字段//調用toJSONString將Java轉String時傳入過濾器System.out.println(JSON.toJSONString(person, simplePropertyPreFilter2));//{"name":"Eve"}
}

自定義過濾器
FastJson提供的簡單過濾器很多時候無法滿足我們需求,這個時候就可以自定義管理器

@Testpublic void toJSONStringWithFilterExample2() {Person person = new Person();//1.實現 ValueFilter 接口 重寫 process 方法ValueFilter filter = (object, name, value) -> {if (name.equals("age")) {return null; // 不包括 "age" 字段}return value;};// 2.實現 PropertyFilter 接口 重寫 apply 方法PropertyFilter filter2 = (object, name, value) -> {if (name.equals("age")) {return false; // 不包括 "age" 字段}return true;};String jsonString1 = JSON.toJSONString(person, filter);//{"name":"Eve"}String jsonString2 = JSON.toJSONString(person, filter2);//{"name":"Eve"}}

當然還可以根據管理器實現原來去手搓來增填功能,深入了解推薦一篇文章
API接口使用Jackson序列化JSON數據動態過濾字段

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72803.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72803.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72803.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DEFI幣生態重構加速,XBIT去中心化交易所引領DEX安全新范式

2025年3月18日&#xff0c;全球加密市場在監管與技術共振下迎來結構性變革。去中心化金融&#xff08;DeFi&#xff09;代幣DEFI幣因跨鏈流動性協議升級引發社區熱議&#xff0c;而幣應XBIT去中心化交易所&#xff08;以下簡稱XBIT&#xff09;憑借其鏈上透明驗證機制、無需下載…

解析漏洞總結

首先說下為什么要寫著篇文章&#xff0c;之前學習倒是學過&#xff0c;學完就忘啊&#xff0c;tmd iis 5.x/6.0 這個版本有兩種解析姿勢  一.兩種解析漏洞 1.目錄解析 2./xxx.asp/xx.jpg 簡單說一下是什么意思&#xff0c;這里是先在他服務器跟目錄創建一個名為 xxx.…

前端小食堂 | Day18 - 身份認證の八卦陣

&#x1f510; 今日秘術&#xff1a;JWT/OAuth2 攻防奧義 1. JWT 安全の六合陣法 // &#x1f6ab; 危險操作&#xff1a;未驗證簽名 const decodeUnsafe (token) > JSON.parse(atob(token.split(.)[1])); // ? 安全姿勢一&#xff1a;嚴格簽名驗證 import jwt fro…

將bin文件燒錄到STM32

將bin文件燒錄到STM32 CoFlash下載生成hex文件hex2bin使用下載bin到單片機 CoFlash下載 選擇需要安裝的目錄 在Config中可以選擇目標芯片的類型 我演示的是 stm32f103c8t6 最小系統板 Adapter&#xff1a;燒錄器類型 Max Clock&#xff1a;下載速度 Por&#xff1a;接口類型&am…

【Embedded World 2025:邊緣 AI、存儲革新與 1X nm 工藝重塑嵌入式未來】

Embedded World 2025于3月11-13日在德國紐倫堡舉辦&#xff0c;作為全球嵌入式系統領域頂級盛會&#xff0c;匯聚超千家展商與3萬專業觀眾&#xff0c;聚焦嵌入式智能、安全管理及行業解決方案。展會呈現邊緣AI、低功耗MCU、5G RedCap、新型存儲及車規級技術等前沿方向&#xf…

3.19刷題

P6443 [COCI 2010/2011 #1] TIMSKO - 洛谷 #include<bits/stdc.h> using namespace std; int main(){int n,m,k,maxp0;cin>>m>>n>>k;for(int i0;i<n;i){//男生參加人數if(k3*i<mn&&2*i<m) maxpi;}cout<<maxp;return 0; }P645…

Android NDK --- JNI從入門到基礎的全面掌握 (上)

引言 先問 jni是什么&#xff1f; jni和ndk 的關系&#xff1f; 答&#xff1a; java調用 C、C 的代碼。 兩者一個是調用&#xff0c;一個是用c 、c 寫 。 這兩個問題問出來似乎知道又好像不知道。 正文 jni 概述 定義&#xff1a;java Native Interface 即 java本地接口 …

爬蟲 crawler 入門爬取不設防網頁 并實現無限增生

基礎版本 爬取網頁后直接將前端html代碼不加處理的輸出 # pip3 install requests import requests# request the target URL def crawler():response requests.get("https://www.scrapingcourse.com/ecommerce/")response.raise_for_status()print(response.text)…

C++高頻(四)之c++11新特性

C++面試高頻(四)之c++11新特性 1.簡述C++11有什么新特性?? 自動類型推導(Type Inference):引入了 auto 關鍵字,允許編譯器根據初始化表達式的類型自動推導變量的類型。統一的初始化語法(Uniform Initialization Syntax):引入了用花括號 {} 進行初始化的統一語法,可…

HarmonyOs- UIAbility應用上下文

上下文為何物 上下文在計算機科學領域是一個廣泛存在的概念。是現代操作系統核心抽象概念之一。其本質是環境信息的結構化封裝。 有過開發經驗的都知道&#xff0c;當我們在一個系統上進行開發的時候&#xff0c;無論是Android&#xff0c;HarmonyOs&#xff0c;Linux 等等&a…

Redis解決緩存擊穿問題——兩種方法

目錄 引言 解決辦法 互斥鎖&#xff08;強一致&#xff0c;性能差&#xff09; 邏輯過期&#xff08;高可用&#xff0c;性能優&#xff09; 設計邏輯過期時間 引言 緩存擊穿&#xff1a;給某一個key設置了過期時間&#xff0c;當key過期的時候&#xff0c;恰好這個時間點對…

架構思維:軟件建模與架構設計的關鍵要點

文章目錄 1. 軟件建模的核心概念2. 七種常用UML圖及其應用場景類圖時序圖組件圖部署圖用例圖狀態圖活動圖 3. 軟件設計文檔的三階段結構4. 架構設計的關鍵實踐1. 用例圖&#xff1a;核心功能模塊2. 部署圖&#xff1a;架構演進階段3. 技術挑戰與解決方案4. 關鍵架構圖示例5. 架…

numpy學習筆記14:模擬隨機游走過程(一次實驗)

numpy學習筆記14&#xff1a;模擬隨機游走過程(一次實驗) 隨機游走是一個對象在離散時間步中的隨機移動&#xff0c;每次移動的方向和步長由概率決定。在用戶提供的代碼中&#xff0c;步長數組steps的每個元素是-1或1&#xff0c;代表向左或向右移動一步。np.random.choice的作…

FPGA-DE2115開發板實現流水燈

文章目錄 一、安裝VScode&#xff0c;在其中下載安裝Verilog-HDL/SystemVerilog插件&#xff1b;&#xff08;1&#xff09;安裝VScode&#xff08;2&#xff09;安裝插件&#xff08;3&#xff09;與Quartus關聯 二、不分模塊實現流水燈&#xff08;1&#xff09;新建工程&…

JS逆向案例-HIKVISION-視頻監控的前端密碼加密分析

免責聲明 本文僅為技術研究與滲透測試思路分享,旨在幫助安全從業人員更好地理解相關技術原理和防御措施。任何個人或組織不得利用本文內容從事非法活動或攻擊他人系統。 如果任何人因違反法律法規或不當使用本文內容而導致任何法律后果,本文作者概不負責。 請務必遵守法律…

Android 動態代理詳解

Android 動態代理方法的原理與關鍵分析 動態代理是一種在運行時動態生成代理對象并攔截方法調用的技術。它廣泛應用于 Android 開發中&#xff0c;例如 AOP&#xff08;面向切面編程&#xff09;、插件化開發、網絡請求框架&#xff08;如 Retrofit&#xff09;等場景。 以下…

碰一碰發視頻saas系統技術源頭一站式開發文檔

碰一碰發視頻系統技術源頭一站式開發文檔 一、引言 在數字化信息傳播高速發展的當下&#xff0c;如何讓視頻分享更便捷、高效&#xff0c;成為商家和開發者們關注的焦點。“碰一碰發視頻”系統以其獨特的交互方式和強大的功能優勢&#xff0c;為視頻分享領域帶來了革命性變革。…

VSCode + CMake

參考文獻&#xff1a; 如何用 GCC, CMake 和 Make 編譯C/C代碼Windows 上的 Linux 子系統&#xff1a;WSLWSL&#xff1a;桌面 UI 遠程連接 RDP 配置 VScode 文章目錄 CMake 配置VSCode 配置launch.jsontask.jsonc_cpp_properties.json CMake 配置 編寫如下的 CmakeLists.t…

yolov5學習及手勢識別實戰

目錄 一、YOLOv5核心原理 1. 單階段檢測范式 2. 關鍵技術特性 二、YOLOv5網絡架構組成 1. Backbone&#xff1a;CSPDarknet53 2. Neck&#xff1a;PANet&#xff08;Path Aggregation Network&#xff09; 3. Head&#xff1a;檢測頭 三、YOLOv5網絡架構細節 1. 整體架…

【視頻】H.264的碼率和圖像質量

1、簡述 分辨率、幀率、I幀設置不變的情況下,碼率過低時,IP攝像機如果沒有足夠的帶寬來傳輸高質量的圖像,便會抹掉一些細節,導致出現馬賽克,尤其是動態性強的畫面(比如:運動的云臺、非固定的攝像頭)。 2、計算碼率 1)碼率的基礎理論公式為: 碼率 (bps) = 分辨率像…