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); ? ? } }
使用方式
現(xiàn)在String result中有如下的JSON串,要取得deptCode
{ ? "status": 0, ? "data": { ? ? "deptId": 76, ? ? "deptCode": "101030000", ? ? "deptName": "成都工務(wù)段", ? ? "dirDeptCode": "100000000", ? ? "deptLevel": 2, ? ? "defaultRoleId": 1, ? ? "createAt": "2021-02-25 02:18:51", ? ? "updateAt": "2021-03-03 09:09:35", ? ? "defaultRoleName": "系統(tǒng)超級管理員" ? } }
//獲取data String data = ChangeJson.getString(result, "data"); //獲取deptCode String deptCode= ChangeJson.getString(data , "deptCode");
Java正則表達式-獲取json某個屬性值
處理數(shù)據(jù)的時候,要匹配json數(shù)據(jù)格式的字符串某個屬性的值
json數(shù)據(jù)格式: {"flow_name":"paramName"}
要獲取到 flow_name屬性的值: paramName
要怎么處理呢?
語法
[abc]
:表示字母abc中的任意一個\w
:除了([0-9a-zA-Z_])還包含了希臘字母,俄文的字母等;\d
:匹配數(shù)字
數(shù)量控制符
?
表示1個或0個。換句話說,表示要不然沒有,要不然只有1個+
表示1個或多個
匹配
處理思路:
{"flow_name":"paramName"}
正則表達式怎么寫? 匹配的是字符(數(shù)字,大小寫和下劃線的組合)
flow_name 是已知的,要匹配 ":"paramName" 這部分的內(nèi)容。
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 : 數(shù)字,字母 ,下劃線 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字符串對應(yīng)屬性的值 * @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; }
結(jié)果:
===== 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
總結(jié):匹配json格式字符串屬性的時候,如果使用\w的時候注意下,其可能包含希臘字母,俄文的字母。明確其內(nèi)容的,直接寫更直觀。屬性是數(shù)字的,就不用加雙引號了,直接使用\d匹配數(shù)字。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot使用Junit測試沒有插入數(shù)據(jù)的原因
這篇文章主要介紹了Springboot使用Junit測試沒有插入數(shù)據(jù)的原因,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Springboot集成RabbitMQ死信隊列的實現(xiàn)
在大多數(shù)的MQ中間件中,都有死信隊列的概念。本文主要介紹了Springboot集成RabbitMQ死信隊列的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09Java讀寫鎖ReadWriteLock原理與應(yīng)用場景詳解
這篇文章主要介紹了Java讀寫鎖ReadWriteLock原理與應(yīng)用場景詳解,讀寫狀態(tài)的設(shè)計,寫鎖的獲取與釋放,鎖降級需要的朋友可以參考下2023-02-02idea自帶Jacoco/idea自動測試語句覆蓋率方法(使用詳解)
這篇文章主要介紹了idea自帶Jacoco/idea自動測試語句覆蓋率方法,本文給大家分享使用方法,通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04創(chuàng)建動態(tài)代理對象bean,并動態(tài)注入到spring容器中的操作
這篇文章主要介紹了創(chuàng)建動態(tài)代理對象bean,并動態(tài)注入到spring容器中的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02JVM內(nèi)存結(jié)構(gòu)相關(guān)知識解析
這篇文章主要介紹了JVM內(nèi)存結(jié)構(gòu)相關(guān)知識解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11