前言
在某些接口对接中,数据的返回储量往往是多段多条的,存储使用这些数据,在某些场景中又只需要其中单独的某条属性,所以笔者需要用一个通用的方法来获取这些特定的值,现编写实现完成,上传分享
主要逻辑代码
以已知属性,去取自己想要的对象属性值
/**
* 从json数组中搜寻想要的json对象的值
* @param jsonArr
* @param keyMap
* @param valKey
* @return
*/
public static String GetJSONArrValByKeyMap(JSONArray jsonArr,Map<String,String> keyMap,String valKey) {
String result="";
//非空判断
if(jsonArr!=null&&jsonArr.size()>0&&keyMap!=null&&(!keyMap.isEmpty())) {
for(int i=0;i<jsonArr.size();i++) {
//其中的jsonObj检索
result=GetJSONObjValByKeyMap(jsonArr.getJSONObject(i),keyMap,valKey);
//找到值不为空就返回
if(!StringUtils.isEmpty(result)) {
return result;
}
}
}
return result;
}
/**
* 获取满足条件的JSON对象的值
* @param jsonObj
* @param keyMap
* @param valKey
* @return
*/
public static String GetJSONObjValByKeyMap(JSONObject jsonObj,Map<String,String> keyMap,String valKey) {
String result="";
//非空判断
if(! ( jsonObj==null||jsonObj.isEmpty()||keyMap==null||keyMap.isEmpty() ) ) {
Iterator<String> iterator=keyMap.keySet().iterator();
//map遍历不满足搜寻的jsonObj直接返回
while(iterator.hasNext()) {
String key=iterator.next();
String keyVal=keyMap.get(key);
String val=jsonObj.getString(key);
if(StringUtils.isEmpty(val)||(!val.equals(keyVal))) {
return result;
}
}
//全部满足,取值返回
result=jsonObj.getString(valKey);
}
return result;
}
调用示例
public static void main(String[] args) throws Exception {
String str="[{'id':'123','name':'张三丰','age':'18'},"+
"{'id':'223','name':'张翠山','age':'20'},"+
"{'id':'323','name':'张三丰','age':'80'}]";
com.alibaba.fastjson.JSONArray jsonArr=com.alibaba.fastjson.JSONArray.parseArray(str);
//关键信息map
Map<String,String> keyMap=new HashMap<>();
keyMap.put("name", "张三丰");
keyMap.put("age", "80");
//查找符合信息的人的id
String result=GetJSONArrValByKeyMap(jsonArr,keyMap,"id");
System.out.println("---result:"+result);
}