这篇“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中某个对象的值”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。