您好,登錄后才能下訂單哦!
這篇“Java怎么獲取JSON中某個對象的值”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java怎么獲取JSON中某個對象的值”文章吧。
public class ChangeJson { public static String getString(String data, String result) { JSONObject jsonObject = null; try { jsonObject = new JSONObject(data); } catch (JSONException e) { e.printStackTrace(); } return jsonObject.optString(result, null); } }
現在String result中有如下的JSON串,要取得deptCode
{ "status": 0, "data": { "deptId": 76, "deptCode": "101030000", "deptName": "成都工務段", "dirDeptCode": "100000000", "deptLevel": 2, "defaultRoleId": 1, "createAt": "2021-02-25 02:18:51", "updateAt": "2021-03-03 09:09:35", "defaultRoleName": "系統超級管理員" } }
//獲取data String data = ChangeJson.getString(result, "data"); //獲取deptCode String deptCode= ChangeJson.getString(data , "deptCode");
處理數據的時候,要匹配json數據格式的字符串某個屬性的值
json數據格式: {"flow_name":"paramName"}
要獲取到 flow_name屬性的值: paramName
要怎么處理呢?
[abc]
:表示字母abc中的任意一個
\w
:除了([0-9a-zA-Z_])還包含了希臘字母,俄文的字母等;
\d
:匹配數字
數量控制符
?
表示1個或0個。換句話說,表示要不然沒有,要不然只有1個
+
表示1個或多個
處理思路:
{"flow_name":"paramName"}
正則表達式怎么寫? 匹配的是字符(數字,大小寫和下劃線的組合)
flow_name 是已知的,要匹配 ":"paramName" 這部分的內容。
String patternStr = keyField+"\":\"([0-9a-zA-Z_]+)?\"";
public static void main(String[] args) { String info = "[{\"SYNC_930000003690\":{\"finalSYSTEMNAME\":\"PXY-CPCP配置中心\",\"P_REQUEST_ID\":\"585471439551123454\",\"finalSYSTEMTYPE\":\"BSS-PXY\",\"finalDeveloperName\":\"\",\"finaltaxtCost\":\"\",\"finalworkRemark\":\"\",\"formId\":930000003690,\"REQUEST_ID\":\"A585545039142506496\",\"finalSuplIptDays\":\"22\"}},{\"SYNC_930000003690\":{\"finalSYSTEMNAME\":\"PXY-CPCP配置中心\",\"P_REQUEST_ID\":\"585471439551123455\",\"finalSYSTEMTYPE\":\"BSS-PXY\",\"finalDeveloperName\":\"\",\"finaltaxtCost\":\"\",\"finalworkRemark\":\"\",\"formId\":930000003694,\"REQUEST_ID\":\"B585545039142506496\",\"finalSuplIptDays\":\"44\"}},{\"SYNC_930000003690\":{\"finalSYSTEMNAME\":\"PXY-CPCP配置中心\",\"P_REQUEST_ID\":\"585471439551123456\",\"finalSYSTEMTYPE\":\"BSS-PXY\",\"finalDeveloperName\":\"\",\"finaltaxtCost\":\"\",\"formId\":930000003692,\"finalworkRemark\":\"\",\"REQUEST_ID\":\"C585545039142506496\",\"finalSuplIptDays\":\"55\"}}]"; String keyField = "P_REQUEST_ID"; System.out.println("===== match "+ keyField + " ========="); // \w : 數字,字母 ,下劃線 0-9 a-z A-Z _ String patternStr = keyField+"\":\"([0-9a-zA-Z_]+)?\""; matchJsonValue(info,patternStr); keyField = "formId"; System.out.println("===== match "+ keyField + " ========="); patternStr = keyField+"\":(\\d+)?"; matchJsonValue(info,patternStr); } /** * 正則表達式 查找匹配json字符串對應屬性的值 * @param sourcStr 字符串 * @param patternStr 正則表達式 * @return 字符集 */ public static List<String> matchJsonValue(String sourcStr, String patternStr) { List<String> aimList = new ArrayList<>(); Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(sourcStr); while (matcher.find()) { System.out.println("group all: " + matcher.group(0)); System.out.println("aim index: " + matcher.group(NumberUtils.INTEGER_ONE)); aimList.add(matcher.group(NumberUtils.INTEGER_ONE)); } return aimList; }
結果:
===== match P_REQUEST_ID =========
group all: P_REQUEST_ID":"585471439551123454"
aim index: 585471439551123454
group all: P_REQUEST_ID":"585471439551123455"
aim index: 585471439551123455
group all: P_REQUEST_ID":"585471439551123456"
aim index: 585471439551123456
===== match formId =========
group all: formId":930000003690
aim index: 930000003690
group all: formId":930000003694
aim index: 930000003694
group all: formId":930000003692
aim index: 930000003692
以上就是關于“Java怎么獲取JSON中某個對象的值”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。