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