java對(duì)于JSON的解析方法舉例詳解
1、數(shù)據(jù)類(lèi)型
1.1、JSONObject
JSONObject是一種在Java中表示JSON對(duì)象的數(shù)據(jù)結(jié)構(gòu)。它是一個(gè)無(wú)序的鍵值對(duì)集合,用花括號(hào)({})包圍,并且每個(gè)鍵值對(duì)由冒號(hào)(:)分隔。
在Java中使用JSONObject,通常需要使用JSON庫(kù)(如Jackson、Gson等)進(jìn)行解析和操作。以下是一些常見(jiàn)的JSONObject操作:
創(chuàng)建JSONObject:
JSONObject jsonObject = new JSONObject();
添加鍵值對(duì)到JSONObject:
jsonObject.put("key1", "value1"); jsonObject.put("key2", 123); jsonObject.put("key3", true); // 可以添加其他JSONObject或JSONArray作為值獲取JSONObject中指定鍵的值:
Object value = jsonObject.get("key");獲取JSONObject中所有鍵的集合:
Set<String> keys = jsonObject.keySet();
遍歷JSONObject中的所有鍵值對(duì):
for (String key : jsonObject.keySet()) { Object value = jsonObject.get(key); // 處理每個(gè)鍵值對(duì) }將JSONObject轉(zhuǎn)換為字符串:
String jsonString = jsonObject.toJSONString();
解析JSON字符串為JSONObject(使用JSON庫(kù)的相關(guān)方法):
JSONObject jsonObject = JSON.parseObject(jsonString); // 示例使用JSON.simple庫(kù)
需要注意的是,具體的操作方式和方法名稱(chēng)可能會(huì)因使用的JSON庫(kù)而有所不同。上述示例中的方法是基于JSON.simple庫(kù)進(jìn)行說(shuō)明的,其他庫(kù)可能會(huì)有自己的API。
通過(guò)JSONObject,您可以方便地處理和操作JSON對(duì)象數(shù)據(jù),在Java中實(shí)現(xiàn)與JSON對(duì)象的交互。
1.2、JSONArray
JSONArray是一種在Java中表示JSON數(shù)組的數(shù)據(jù)結(jié)構(gòu)。它是在一對(duì)方括號(hào)([])內(nèi)包含零個(gè)或多個(gè)JSON值的有序集合。JSONArray可以包含不同類(lèi)型的值,例如字符串、數(shù)字、布爾值、對(duì)象或其他數(shù)組。
在Java中使用JSONArray,通常需要使用JSON庫(kù)(如Jackson、Gson等)進(jìn)行解析和操作。以下是一些常見(jiàn)的JSONArray操作:
創(chuàng)建JSONArray:
JSONArray jsonArray = new JSONArray();
添加元素到JSONArray:
jsonArray.add("value1"); jsonArray.add(123); jsonArray.add(true); // 可以添加其他JSONArray或JSONObject作為元素獲取JSONArray的長(zhǎng)度(元素個(gè)數(shù)):
int length = jsonArray.size();
獲取JSONArray中指定位置的元素:
Object element = jsonArray.get(index);
遍歷JSONArray中的所有元素:
for (Object element : jsonArray) { // 處理每個(gè)元素 }將JSONArray轉(zhuǎn)換為Java數(shù)組:
Object[] array = jsonArray.toArray();
將JSONArray轉(zhuǎn)換為字符串:
String jsonString = jsonArray.toJSONString();
解析JSON字符串為JSONArray(使用JSON庫(kù)的相關(guān)方法):
JSONArray jsonArray = JSON.parseArray(jsonString); // 示例使用JSON.simple庫(kù)
需要注意的是,具體的操作方式和方法名稱(chēng)可能會(huì)因使用的JSON庫(kù)而有所不同。上述示例中的方法是基于JSON.simple庫(kù)進(jìn)行說(shuō)明的,其他庫(kù)可能會(huì)有自己的API。
通過(guò)JSONArray,您可以方便地處理和操作JSON數(shù)組數(shù)據(jù),在Java中實(shí)現(xiàn)與JSON數(shù)組的交互。
1.3、ArrayList
ArrayList是Java中的一種動(dòng)態(tài)數(shù)組(也稱(chēng)為可變大小的數(shù)組),它實(shí)現(xiàn)了List接口。與傳統(tǒng)的靜態(tài)數(shù)組相比,ArrayList具有自動(dòng)擴(kuò)展和縮小容量的能力,可以根據(jù)需要?jiǎng)討B(tài)地調(diào)整其大小。
以下是一些常見(jiàn)的ArrayList操作:
創(chuàng)建ArrayList:
ArrayList<String> list = new ArrayList<>(); // 創(chuàng)建一個(gè)存儲(chǔ)字符串的ArrayList
添加元素到ArrayList:
list.add("element1"); list.add("element2"); // 可以添加任意類(lèi)型的對(duì)象到ArrayList獲取ArrayList中指定位置的元素:
String element = list.get(index);
修改ArrayList中指定位置的元素:
list.set(index, "new element");
刪除ArrayList中指定位置的元素:
list.remove(index);
刪除ArrayList中指定元素的第一個(gè)匹配項(xiàng):
list.remove("element");判斷ArrayList是否包含指定元素:
boolean contains = list.contains("element");獲取ArrayList的大?。ò脑貍€(gè)數(shù)):
int size = list.size();
遍歷ArrayList中的所有元素:
for (String element : list) { // 處理每個(gè)元素 }將ArrayList轉(zhuǎn)換為數(shù)組:
String[] array = list.toArray(new String[0]);
需要注意的是,ArrayList可以存儲(chǔ)任意類(lèi)型的對(duì)象,而不限于基本數(shù)據(jù)類(lèi)型。使用ArrayList時(shí),您可以根據(jù)需要?jiǎng)討B(tài)地添加、刪除和修改元素,提供了更靈活的數(shù)據(jù)存儲(chǔ)和操作方式。
2、java轉(zhuǎn)JSON
2.1、javaBean對(duì)象轉(zhuǎn)化為JSON串
public void javaBeanToJSON() {
Person person = new Person(1001,"張三",20,"2002-07-18 12:20:34"); // 有參構(gòu)造函數(shù)(實(shí)體類(lèi))
// JSON類(lèi)有靜態(tài)方法直接調(diào)用可以將javaBean對(duì)象轉(zhuǎn)化為JSON串
String jsonString = JSON.toJSONString(person,true);
System.out.println(jsonString);
}結(jié)果
{
"age":20,
"birthday":"2002-07-18 12:20:34",
"eid":1001,
"username":"張三"
}
2.2、JavaBean對(duì)象的數(shù)組轉(zhuǎn)化成JSON數(shù)組
public void arrayToJSON() {
Person p1 = new Person(1001,"張三",20,"2002-07-18 12:20:34");
Person p2 = new Person(1002,"張四",21,"2003-07-18 12:20:34");
Person p3 = new Person(1003,"張五",22,"2004-07-18 12:20:34");
Person[] persopns = {p1,p2,p3};
// 數(shù)組轉(zhuǎn)化成JSON格式的數(shù)組
String jsonString = JSON.toJSONString(persopns, true); // true 是否嚴(yán)格轉(zhuǎn)化成json數(shù)組
System.out.println(jsonString);
}結(jié)果
[{
"age":20,
"birthday":"2002-07-18 12:20:34",
"eid":1001,
"username":"張三"
},{
"age":21,
"birthday":"2003-07-18 12:20:34",
"eid":1002,
"username":"張四"
},{
"age":22,
"birthday":"2004-07-18 12:20:34",
"eid":1003,
"username":"張五"
}]
2.3、List集合轉(zhuǎn)化成JSON格式
public void listToJSON() {
Person p1 = new Person(1001,"張三",20,"2002-07-18 12:20:34");
Person p2 = new Person(1002,"張四",21,"2003-07-18 12:20:34");
Person p3 = new Person(1003,"張五",22,"2004-07-18 12:20:34");
List<Person> list = new ArrayList<Person>();
list.add(p1);
list.add(p2);
list.add(p3);
// Collections.addAll(list,p1,p2,p3); // 一次性add
String jsonString = JSON.toJSONString(list,true);
System.out.println(jsonString);
}結(jié)果
[
{
"age":20,
"birthday":"2002-07-18 12:20:34",
"eid":1001,
"username":"張三"
},
{
"age":21,
"birthday":"2003-07-18 12:20:34",
"eid":1002,
"username":"張四"
},
{
"age":22,
"birthday":"2004-07-18 12:20:34",
"eid":1003,
"username":"張五"
}
]
3、JSON轉(zhuǎn)Java
2.1、JSON轉(zhuǎn)化為JAVA的Bean
public void jsonToJavaBean() {
String json = "{\"age\":20,\"birthday\":\"2002-07-18 12:20:34\",\"eid\":1001,\"username\":\"張三\"}";
Person person = JSON.parseObject(json,Person.class); // Person.class 類(lèi)的結(jié)構(gòu)信息
System.out.println(person);
}結(jié)果
Person{eid=1001, username='張三', age=20, birthday='2002-07-18 12:20:34'}
3.2、JSON轉(zhuǎn)化為java集合
public void JSONToJavaList() {
String json = "[{\"age\":20,\"birthday\":\"2002-07-18 12:20:34\",\"eid\":1001,\"username\":\"張三\"},{\"age\":21,\"birthday\":\"2003-07-18 12:20:34\",\"eid\":1002,\"username\":\"張四\"},{\"age\":22,\"birthday\":\"2004-07-18 12:20:34\",\"eid\":1003,\"username\":\"張五\"}]";
List<Person> list = JSON.parseArray(json, Person.class);
System.out.println(list);
}結(jié)果
[Person{eid=1001, username='張三', age=20, birthday='2002-07-18 12:20:34'},
Person{eid=1002, username='張四', age=21, birthday='2003-07-18 12:20:34'},
Person{eid=1003, username='張五', age=22, birthday='2004-07-18 12:20:34'}]
4、JSONObject與JSONArray
4.1、JSONArray
[
{
"key": "value",
"key2": "value2"
},
{
"key": "value",
"key2": "value2"
},
{
"key": "value",
"key2": "value2"
}
]或
[
{
"key": "value"
},
{
"key": "value"
},
{
"key": "value"
}
]4.2 JSONObject
{
"key": "value",
"key2": "value2",
"key3": "value3"
}4.3、兩者的區(qū)別
區(qū)別在于JSONObject是一個(gè){}包裹起來(lái)的一個(gè)對(duì)象(Object),而JSONArray則是[]包裹起來(lái)的一個(gè)數(shù)組(Array),JSONArray由一個(gè)或者多個(gè)JSONObjec 組成,說(shuō)白點(diǎn)就是一個(gè)是數(shù)組一個(gè)是對(duì)象或字符串
兩者的區(qū)別就是JSONArray是數(shù)組,里面存著對(duì)象;JSONObect是對(duì)象,里面存的是字符串。通俗來(lái)說(shuō),JSONArray是運(yùn)輸機(jī),里面裝的是汽車(chē),汽車(chē)?yán)锩孀氖侨耍鳭SONObect是汽車(chē),里面裝的是人。
JSONArray和JSONObject再使用時(shí)候的第一個(gè)最重要的區(qū)別就是: JSONArray是一個(gè)一個(gè)加進(jìn)去的;
JSONObject是一對(duì)一對(duì)加進(jìn)去的;JSONObject最外面用的是 { } ,JSONArray最外面用的是 [ ]
5、JSONArray與List互轉(zhuǎn)
5.1JSONArray轉(zhuǎn)List
5.1.1.JSONArray字符串轉(zhuǎn)List
//初始化JSONArray JSONArray array=new JSONArray(); array.add(0,"a"); array.add(1,"b"); array.add(2,"c"); List<String> list = JSONObject.parseArray(array.toJSONString(),String.class); System.out.println(list.toString());
結(jié)果:
[a, b, c]
5.1.2.JSONArray對(duì)象 轉(zhuǎn) List
//初始化JSONArray
JSONArray jsonArray = JSONArray.parseArray("[{\"name\":\"zhangsan\",\"age\":18},{\"name\":\"lisi\",\"age\":23}]");
//打印jsonArray
System.out.println(jsonArray.toJSONString());
//轉(zhuǎn)List
List<Body> list = JSONArray.parseArray(jsonArray.toJSONString(), Body.class);
//打印List<Body>
System.out.println(list.toString());結(jié)果
[{“name”:“zhangsan”,“age”:18},{“name”:“lisi”,“age”:23}]
[Body{name=‘zhangsan’, age=18}, Body{name=‘lisi’, age=23}]
5.2 .List轉(zhuǎn)JSONArray
List<T> list = new ArrayList<T>(); JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(list));
總結(jié)
到此這篇關(guān)于java對(duì)于JSON的解析方法的文章就介紹到這了,更多相關(guān)java解析JSON內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Thread線(xiàn)程的基礎(chǔ)知識(shí)及常見(jiàn)疑惑點(diǎn)總結(jié)
在本篇內(nèi)容里小編給大家分享的是關(guān)于Thread線(xiàn)程的基礎(chǔ)知識(shí)及常見(jiàn)疑惑點(diǎn),對(duì)此有學(xué)習(xí)需求的朋友們可以學(xué)習(xí)參考下。2019-05-05
spring如何集成cxf實(shí)現(xiàn)webservice接口功能詳解
這篇文章主要給大家介紹了關(guān)于spring如何集成cxf實(shí)現(xiàn)webservice接口功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家 的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧2018-07-07
詳解如何在SpringBoot項(xiàng)目中使用統(tǒng)一返回結(jié)果
在一個(gè)完整的項(xiàng)目中,如果每一個(gè)控制器的方法都返回不同的結(jié)果,那么對(duì)項(xiàng)目的維護(hù)和擴(kuò)展都會(huì)很麻煩。因此,本文為大家準(zhǔn)備了SpringBoot項(xiàng)目中使用統(tǒng)一返回結(jié)果的方法,需要的可以參考一下2022-10-10
IDEA+JRebel實(shí)現(xiàn)全自動(dòng)熱部署的方法步驟
這篇文章主要介紹了IDEA+JRebel實(shí)現(xiàn)全自動(dòng)熱部署的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
詳解Java線(xiàn)程池的增長(zhǎng)過(guò)程
在本篇文章里小編給大家整理的是關(guān)于Java線(xiàn)程池的增長(zhǎng)過(guò)程以及相關(guān)知識(shí)點(diǎn),需要的朋友們可以參考下。2019-08-08
Spring三級(jí)緩存思想解決循環(huán)依賴(lài)總結(jié)分析
這篇文章主要為大家介紹了Spring三級(jí)緩存思想解決循環(huán)依賴(lài)總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
mybatisplus的坑?insert標(biāo)簽insert?into?select無(wú)參數(shù)問(wèn)題的解決
這篇文章主要介紹了mybatisplus的坑?insert標(biāo)簽insert?into?select無(wú)參數(shù)問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring Cloud Alibaba 本地調(diào)試介紹及方案設(shè)計(jì)
為了解決 本地調(diào)試 的問(wèn)題,本文實(shí)現(xiàn)了一種簡(jiǎn)單實(shí)用的策略,可以通過(guò) Nacos 動(dòng)態(tài)配置服務(wù)路由,還可以基于用戶(hù),部門(mén),組織等級(jí)別配置服務(wù)路由,實(shí)現(xiàn) 本地調(diào)試 的同時(shí),實(shí)際上也實(shí)現(xiàn) 灰度發(fā)布,感興趣的朋友跟隨小編一起看看吧2021-07-07
Java中@PathVariable 和 @RequestParam的區(qū)別小結(jié)
本文主要介紹了Java中@PathVariable 和 @RequestParam的區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2026-02-02

