您好,登录后才能下订单哦!
这篇“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。