架构师之json-----------通过path查找指定数据
1.前言
如题。
2.代码.
import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.lijunnan.JsonTypeEnum; /** * * @author 李俊南 * */ public class JsonUtil { private static final Logger logger = Logger.getLogger(JsonUtil.class); /** * 获取object需要的json类型,只针对jsonobject.get的object * * @param object * 需要判断的json对象 * @return object匹配的类型 */ public static JsonTypeEnum getType(Object object) { if (object instanceof String) { return JsonTypeEnum.String; } else if (StringUtils.isNumeric(object.toString())) { return JsonTypeEnum.Number; } else if (object instanceof JSONObject) { return JsonTypeEnum.JSONObject; } else if (object instanceof JSONArray) { return JsonTypeEnum.jsonArray; } else { return JsonTypeEnum.Other; } } /** * 根据对应的path如A.b1.c1,获取最里层的json的String的值 jaonarray先不考虑 * * @param json * 需要解析的jsonobject * @param path * 格式为形如a.b.c.d * * * @return 如果没找到或者异常则返回null,否则返回找到的对应值 */ public static String getJsonValueByPath(String jsonObjectString, String path) { try { JSONObject json = JSONObject.parseObject(jsonObjectString); logger.info("分析数据:"+jsonObjectString+"path:"+path); if (StringUtils.isEmpty(path) || null == json) { return null; } // 1.如果不包含.号,则是第一层 if (!path.contains(".")) { return json.getString(path); } else { // 包含.号的,至少一层以上的层级,层层获取 String[] paths = StringUtils.split(path, "."); JSONObject objectLast = json; for (int i = 0; i < paths.length; i++) { Object objectTemp = objectLast.get(paths[i]); if(null==objectTemp){ return null; } JsonTypeEnum jsonType = getType(objectTemp); if (jsonType == JsonTypeEnum.String) { // 找到String,则返回 return (String) objectTemp; } else if (jsonType == JsonTypeEnum.Number) { return String.valueOf(objectTemp); } else if (jsonType == JsonTypeEnum.JSONObject) { // 没找到String ,继续往下找,jaonarray先不考虑 objectLast = (JSONObject) objectTemp; continue; } } } } catch (Exception e) { logger.error(e.getMessage(), e); } return null; } }
public enum JsonTypeEnum { String, jsonArray, JSONObject, Number, Other }
3.注意事项。
json的jar包可以用net.json的官方jar替代ali的jar。
相关推荐
yangkang 2020-11-09
lbyd0 2020-11-17
sushuanglei 2020-11-12
85477104 2020-11-17
KANSYOUKYOU 2020-11-16
wushengyong 2020-10-28
lizhengjava 2020-11-13
星月情缘 2020-11-13
huangxiaoyun00 2020-11-13
luyong0 2020-11-08
腾讯soso团队 2020-11-06
Apsaravod 2020-11-05
PeterChangyb 2020-11-05
gaobudong 2020-11-04
wwwjun 2020-11-02
gyunwh 2020-11-02
EchoYY 2020-10-31
dingyahui 2020-10-30