Java如何獲取JSON中某個(gè)對(duì)象的值
Java獲取JSON中某個(gè)對(duì)象的值
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)超級(jí)管理員"
? }
}//獲取data String data = ChangeJson.getString(result, "data"); //獲取deptCode String deptCode= ChangeJson.getString(data , "deptCode");
Java正則表達(dá)式-獲取json某個(gè)屬性值
處理數(shù)據(jù)的時(shí)候,要匹配json數(shù)據(jù)格式的字符串某個(gè)屬性的值
json數(shù)據(jù)格式: {"flow_name":"paramName"}
要獲取到 flow_name屬性的值: paramName
要怎么處理呢?
語(yǔ)法
[abc]:表示字母abc中的任意一個(gè)\w:除了([0-9a-zA-Z_])還包含了希臘字母,俄文的字母等;\d:匹配數(shù)字
數(shù)量控制符
?表示1個(gè)或0個(gè)。換句話說(shuō),表示要不然沒(méi)有,要不然只有1個(gè)+表示1個(gè)或多個(gè)
匹配
處理思路:
{"flow_name":"paramName"}正則表達(dá)式怎么寫(xiě)? 匹配的是字符(數(shù)字,大小寫(xiě)和下劃線的組合)
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);
}
/**
* 正則表達(dá)式 查找匹配json字符串對(duì)應(yīng)屬性的值
* @param sourcStr 字符串
* @param patternStr 正則表達(dá)式
* @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格式字符串屬性的時(shí)候,如果使用\w的時(shí)候注意下,其可能包含希臘字母,俄文的字母。明確其內(nèi)容的,直接寫(xiě)更直觀。屬性是數(shù)字的,就不用加雙引號(hào)了,直接使用\d匹配數(shù)字。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Redis Java 集成到 Spring Boot的詳細(xì)過(guò)程
本文介紹了如何使用SpringBoot連接Redis,并展示了如何配置Redis服務(wù)地址、創(chuàng)建Controller類以及進(jìn)行基本的Redis操作,如字符串、列表、集合、哈希和有序集合,感興趣的朋友跟隨小編一起看看吧2024-12-12
Struts2實(shí)現(xiàn)文件上傳功能實(shí)例解析
這篇文章主要介紹了Struts2實(shí)現(xiàn)文件上傳功能實(shí)例解析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01
Java中用戶向系統(tǒng)傳遞參數(shù)的三種基本方式實(shí)例分享
這篇文章主要介紹了Java中用戶向系統(tǒng)傳遞參數(shù)的三種基本方式實(shí)例,有需要的朋友可以參考一下2014-01-01
Java 線程狀態(tài)和等待喚醒機(jī)制和線程池的實(shí)現(xiàn)
這篇文章主要介紹了Java 線程狀態(tài)和等待喚醒機(jī)制和線程池的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Mybatis-plus批量去重插入ON DUPLICATE key update使用方式
這篇文章主要介紹了Mybatis-plus批量去重插入ON DUPLICATE key update使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
MyBatis連接數(shù)據(jù)庫(kù)配置的基本步驟和機(jī)制
MyBatis 是一個(gè)流行的持久層框架,它通過(guò)使用XML或注解的方式將SQL語(yǔ)句、存儲(chǔ)過(guò)程和Java方法進(jìn)行綁定,從而避免了手寫(xiě)大量的JDBC代碼和手動(dòng)設(shè)置參數(shù)與結(jié)果集,本文給大家介紹了MyBatis連接數(shù)據(jù)庫(kù)配置的基本步驟和機(jī)制,需要的朋友可以參考下2024-05-05
Springboot傳輸數(shù)據(jù)時(shí)日期格式化問(wèn)題
這篇文章主要介紹了Springboot傳輸數(shù)據(jù)時(shí)日期格式化問(wèn)題,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
springboot實(shí)現(xiàn)小程序支付的項(xiàng)目實(shí)踐
本文主要介紹了springboot實(shí)現(xiàn)小程序支付的項(xiàng)目實(shí)踐,?可以通過(guò)調(diào)用微信支付?API?實(shí)現(xiàn)支付功能,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09

