Java中的JSONObject使用操作詳解
java中jsonObject的使用
話不多說上代碼:
package com.yst.testData; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.*; public class testJson { public static void main(String[] args) { String jsonStr = "{\"842\":{\"useranswer\":\"3407|3408\",\"score\":0},\"846\":{\"useranswer\":\"3414\",\"score\":0},\"847\":{\"useranswer\":\"3499\",\"score\":2}}\n"; //把字符串轉(zhuǎn)換為jsonObject JSONObject jsonObject = JSONObject.parseObject(jsonStr); //獲取key Set<String> jsonset = jsonObject.keySet(); //循環(huán)key for (String key : jsonset) { //通過key獲取這個(gè)key下的json String result = jsonObject.getString(key); //字符串轉(zhuǎn)換jsonObject JSONObject injson = JSONObject.parseObject(result); //獲取 String useranswer = injson.getString("useranswer"); String score = injson.getString("score"); System.out.println(useranswer + score); } testArray(); mapToJson(); } //解析數(shù)組 public static void testArray() { String json = "{\n" + "\t\"code\": \"200\",\n" + "\t\"bannerlist\": [{\n" + "\t\t\"img\": \"http://imgcdn.mingcloud.net/image/student/83e3c4c9b3a44375b290e23cd6b6ea95/202105130953372113179345.jpg@!thumbnail_600w_100h?x-oss-process=image/resize,m_fill,h_280,w_703,limit_0\",\n" + "\t\t\"bannerType\": \"0\",\n" + "\t\t\"bannerid\": \"1\",\n" + "\t\t\"link\": \"http://h5.mingcloud.net/growing-tree/elegant-demeanor.html\",\n" + "\t\t\"weight\": 100,\n" + "\t\t\"dates\": \"2021-07-02 14:22:54\",\n" + "\t\t\"title\": \"xyfc\",\n" + "\t\t\"status\": \"0\"\n" + "\t}],\n" + "\t\"sdk\": \"0\"\n" + "}"; JSONObject jsonObject = JSONObject.parseObject(json); String code = jsonObject.getString("code"); System.out.println(code); JSONArray array = jsonObject.getJSONArray("bannerlist"); List<String> list=new ArrayList<>(); for (int i=0;i<array.size();i++){ JSONObject json1= array.getJSONObject(i); String img=json1.getString("img"); String bannerType=json1.getString("bannerType"); String bannerid=json1.getString("bannerid"); String link=json1.getString("link"); String weight=json1.getString("weight"); String dates=json1.getString("dates"); String title=json1.getString("title"); String status=json1.getString("status"); System.out.println(img+bannerType+bannerid+link+weight+dates+title+status); } } //map轉(zhuǎn)為json public static void mapToJson(){ Map<String,Object> map=new HashMap<>(); map.put("1","哈哈"); map.put("2","呵呵"); String mapToJson=JSON.toJSONString(map); JSONObject json=JSONObject.parseObject(mapToJson); System.out.println(json); //JsonObject 轉(zhuǎn)化為map Map<String,Object> itemMap=JSONObject.toJavaObject(json,Map.class); Set<String> map1=itemMap.keySet(); for (String key:map1){ System.out.println("key為"+key+"對(duì)應(yīng)的值為"+map.get(key)); } //list轉(zhuǎn)為jsonarray List<String> list=new ArrayList<>(); list.add("吳xiaoxiao"); list.add("吳哈哈"); JSONArray array=JSONArray.parseArray(JSON.toJSONString(list)); System.out.println(array); for (int i=0;i<array.size();i++){ System.out.println(array.get(i)); } } }
Java中的JSONObject詳解
一、引言
在Java開發(fā)中,處理JSON數(shù)據(jù)是一種常見的需求。JSONObject
是處理JSON對(duì)象的一個(gè)非常有用的類,它提供了一系列的API來操作JSON對(duì)象。本文將詳細(xì)介紹JSONObject
的使用方法和一些常見的操作。
環(huán)境準(zhǔn)備(引入依賴):
<dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.26</version> </dependency>
二、JSONObject的創(chuàng)建與基本操作
1、創(chuàng)建JSONObject
JSONObject
可以通過多種方式創(chuàng)建,最基本的是使用默認(rèn)構(gòu)造函數(shù):
import org.json.JSONObject; public class JSONObjectDemo { public static void main(String[] args) { // 使用默認(rèn)構(gòu)造函數(shù)創(chuàng)建JSONObject JSONObject jsonObject = new JSONObject(); System.out.println("Empty JSONObject: " + jsonObject.toString()); } }
2、添加鍵值對(duì)
向JSONObject
中添加數(shù)據(jù)可以通過put
方法實(shí)現(xiàn):
// 向JSONObject添加鍵值對(duì) jsonObject.put("name", "ning"); jsonObject.put("age", 25);
3、獲取值
從JSONObject
中獲取值,可以使用get
方法或者特定類型的getX
方法:
// 使用get方法獲取值 Object name = jsonObject.get("name"); // 使用特定類型的getX方法獲取值 int age = jsonObject.getInt("age");
三、JSONObject的高級(jí)特性
1、遍歷JSONObject
遍歷JSONObject
中的所有鍵值對(duì),可以使用keys
方法和增強(qiáng)型for循環(huán):
// 遍歷JSONObject for (String key : jsonObject.keySet()) { Object value = jsonObject.get(key); System.out.println(key + ": " + value); }
2、從字符串創(chuàng)建JSONObject
如果已經(jīng)有了一個(gè)JSON格式的字符串,可以直接從該字符串創(chuàng)建JSONObject
:
String jsonString = "{\"name\":\"ning\",\"age\":25}"; JSONObject jsonObjectFromString = new JSONObject(jsonString); System.out.println("JSONObject from String: " + jsonObjectFromString);
3、JSONObject與JSONArray的結(jié)合使用
JSONObject
可以包含JSONArray
,這使得處理復(fù)雜的JSON結(jié)構(gòu)變得簡(jiǎn)單:
// 創(chuàng)建JSONArray并添加到JSONObject JSONArray jsonArray = new JSONArray(); jsonArray.put("Java"); jsonArray.put("Python"); jsonArray.put("C++"); jsonObject.put("languages", jsonArray); System.out.println("JSONObject with JSONArray: " + jsonObject);
4、更新和刪除鍵值對(duì)
JSONObject
也支持更新和刪除操作:
// 更新鍵值對(duì) jsonObject.put("age", 26); // 刪除鍵值對(duì) jsonObject.remove("name");
四、錯(cuò)誤處理
在使用JSONObject
時(shí),錯(cuò)誤處理是一個(gè)重要的環(huán)節(jié),因?yàn)樗梢詭椭覀儍?yōu)雅地處理數(shù)據(jù)不一致、格式錯(cuò)誤或鍵不存在等問題。以下是一些詳細(xì)的錯(cuò)誤處理策略:
1. 鍵值存在性檢查
在嘗試訪問JSONObject
中的鍵之前,首先檢查該鍵是否存在,可以避免拋出JSONException
。JSONObject
提供了has
方法來檢查鍵是否存在:
if (jsonObject.has("key")) { String value = jsonObject.getString("key"); } else { // 鍵不存在的處理邏輯 }
2. 使用optX系列方法
optX
系列方法是安全的訪問方法,當(dāng)鍵不存在時(shí),它們不會(huì)拋出異常,而是返回null
或默認(rèn)值。例如,optString
、optInt
等:
// 如果鍵不存在,則返回默認(rèn)值"Default Value" String value = jsonObject.optString("key", "Default Value");
3. 異常捕獲
使用try-catch
塊來捕獲和處理可能發(fā)生的JSONException
,這樣可以在發(fā)生錯(cuò)誤時(shí)提供更多的控制和反饋:
try { JSONObject jsonObject = new JSONObject(jsonString); // 處理JSONObject } catch (JSONException e) { // 處理解析錯(cuò)誤 System.err.println("Invalid JSON: " + e.getMessage()); }
4. 處理JSON解析異常
JSONException
可能由多種原因引起,例如不完整的JSON數(shù)據(jù)、鍵不存在、數(shù)組越界或類型不匹配。對(duì)于這些情況,應(yīng)確保JSON數(shù)據(jù)的完整性和正確的格式,并在獲取鍵值之前,確保JSON對(duì)象中包含該鍵。
五、總結(jié)
JSONObject
是Java中處理JSON數(shù)據(jù)的強(qiáng)大工具,它不僅支持基本的創(chuàng)建和數(shù)據(jù)操作,還提供了遍歷、與JSONArray
的結(jié)合使用以及錯(cuò)誤處理等高級(jí)特性。掌握JSONObject
的使用,可以讓我們?cè)谔幚鞪SON數(shù)據(jù)時(shí)更加得心應(yīng)手。
參考文章:
到此這篇關(guān)于Java中的JSONObject使用操作詳解的文章就介紹到這了,更多相關(guān)Java JSONObject使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springmvc處理模型數(shù)據(jù)ModelAndView過程詳解
這篇文章主要介紹了springmvc處理模型數(shù)據(jù)ModelAndView過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01SpringBoot跨域Access-Control-Allow-Origin實(shí)現(xiàn)解析
這篇文章主要介紹了SpringBoot跨域Access-Control-Allow-Origin實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12SpringBoot結(jié)合Ajax實(shí)現(xiàn)登錄頁面實(shí)例
大家好,本篇文章主要講的是SpringBoot結(jié)合Ajax實(shí)現(xiàn)登錄頁面實(shí)例,感興趣的同學(xué)趕快來看一看,對(duì)你有幫助的話記得收藏一下2022-02-02解決SpringMVC @RequestMapping不設(shè)置value出現(xiàn)的問題
這篇文章主要介紹了解決SpringMVC @RequestMapping不設(shè)置value出現(xiàn)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08解決spring.thymeleaf.cache=false不起作用的問題
這篇文章主要介紹了解決spring.thymeleaf.cache=false不起作用的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06spring/springboot整合curator遇到的坑及解決
這篇文章主要介紹了spring/springboot整合curator遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05