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");
Java正则表达式-获取json某个属性值
处理数据的时候,要匹配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);
}
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
总结:匹配json格式字符串属性的时候,如果使用\w的时候注意下,其可能包含希腊字母,俄文的字母。明确其内容的,直接写更直观。属性是数字的,就不用加双引号了,直接使用\d匹配数字。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
相关文章