依赖包:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.22</version> </dependency>
代码:
package com.example.demo.d1; import com.alibaba.fastjson.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author carl */ public class JsonRecolve { public static void main(String[] args) { JsonRecolve oi = new JsonRecolve(); String resResult = oi.jsonStrGenerate(); System.out.println("json串:" + resResult); JSONObject jsonObject = JSONObject.parseObject(resResult); System.out.println("解析结果1:" + jsonStrResolve(jsonObject, "sMap.list2[0]")); System.out.println("解析结果2:" + jsonStrResolve(jsonObject, "sMap.list1[0].listMapK1")); System.out.println("解析结果3:" + jsonStrResolve(jsonObject, "name")); } /** * 生成json数据 * @return */ public String jsonStrGenerate(){ Map<String, Object> map = new HashMap<>(4); map.put("httpUrl", "http://zy12345.cn"); map.put("name", "zhang_san"); map.put("age","10" ); Map<String, Object> sMap = new HashMap<>(2); sMap.put("zName","zValue"); map.put("sMap",sMap); ArrayList<Map<String,Object>> list1 = new ArrayList<>(); HashMap<String, Object> listMap = new HashMap<>(); listMap.put("listMapK1", "listMapV1"); listMap.put("listMapK2","listMapV2"); list1.add(listMap); sMap.put("list1", list1); ArrayList<String> list2 = new ArrayList<>(); list2.add("aaaa"); list2.add("bbbb"); list2.add("cccc"); list2.add("dddd"); sMap.put("list2", list2); return JSONObject.toJSONString(map); } /** * 注意:只处理了字符串和数组 * 递归解析path:例如 object.object * @param jsonStr * @param path key在json串中的位置 多级路径使用符号 '.'来做解析 * @return */ public static String jsonStrResolve(JSONObject jsonStr,String path){ try { // 是否为数组 String regx = "\\[\\d*\\]"; String[] pathArray = path.split("\\."); String strByRegx = findStrByRegx(path, regx); if (pathArray.length > 1) { JSONObject jsonObject = jsonStr.getJSONObject(pathArray[0]); String arrayIndex = findStrByRegx(pathArray[0], regx); if (arrayIndex != null) { String replace = pathArray[0].replace(arrayIndex, ""); Object obj = jsonStr.getJSONArray(replace).get(Integer.valueOf(arrayIndex.substring(1, arrayIndex.length() - 1))); if(obj instanceof JSONObject){ jsonObject = JSONObject.parseObject(obj.toString()); }else{ return obj.toString(); } } return jsonStrResolve(jsonObject, path.substring(path.indexOf(".")+1)); }else if(strByRegx != null){ return (String)jsonStr.getJSONArray(path.replace(strByRegx,"")).get(Integer.valueOf(strByRegx.substring(1, strByRegx.length() - 1))); }else{ return jsonStr.getString(path); } }catch (Exception e){ System.out.println("参数path【" + path + "】错误:" + e.getMessage()); e.printStackTrace(); return null; } } /** * 正则表达式查找字符串 * @param content * @param regx * @return */ public static String findStrByRegx(String content,String regx){ Pattern r = Pattern.compile(regx); Matcher m = r.matcher(content); String str = null; if (m.find( )) { System.out.println("MATCH: " + content); str = m.group(); } else { System.out.println("NO MATCH"); } return str; } }