1.前言
如题。
2.代码.
3.注意事项。
json的jar包可以用net.json的官方jar替代ali的jar。
如题。
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。