架構師之json-----------通過path查詢指定資料
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。
相關文章
- indexedDB 通過索引查詢資料Index索引
- 通過Web API查詢資料WebAPI
- C#通過ODBC查詢HANA資料庫資料C#資料庫
- 通過字串構建查詢圖片資源ID字串
- 架構之:資料流架構架構
- MongoDB之資料查詢(where條件過濾)MongoDB
- python通過淘寶IP資料庫查詢地區Python資料庫
- 通過shell指令碼生成查詢表資料的sql指令碼SQL
- 大資料架構師大資料架構
- Java和大資料架構師面試通關要點Java大資料架構面試
- 通過awr 查詢資料庫最近有沒有重啟!資料庫
- MongoDB之資料查詢(資料排序)MongoDB排序
- 【資料結構】折半查詢(二分查詢)資料結構
- MongoDB之資料查詢操作MongoDB
- 資料結構之查詢(順序、折半、分塊查詢,B樹、B+樹)資料結構
- 23.資料結構 查詢資料結構
- 架構師必備:多維度查詢的最佳實踐架構
- 資料架構之我見架構
- 大資料架構之:Spark大資料架構Spark
- MongoDB之資料查詢(陣列)MongoDB陣列
- 通過點陣圖篩選優化資料倉儲查詢效能優化
- 資料結構-單連結串列查詢按序號查詢資料結構
- 資料結構實驗之查詢七:線性之雜湊表資料結構
- 通過SQL查詢UDUMP檔案SQL
- 通過clss屬性查詢元素
- javascript資料結構之順序查詢簡單介紹JavaScript資料結構
- 重學資料結構(八、查詢)資料結構
- 資料結構之三大查詢資料結構
- 資料結構:速通並查集資料結構並查集
- 資料庫全表查詢之-分頁查詢優化資料庫優化
- 通過 v$database_block_corruption 查詢資料檔案中的壞塊DatabaseBloC
- [Mysql 查詢語句]——查詢指定記錄MySql
- 【索引】Oracle查詢指定索引提高查詢效率索引Oracle
- PB級資料實時查詢,滴滴Elasticsearch多叢集架構實踐Elasticsearch架構
- 架構設計之資料分片架構
- 資料庫之查詢最佳化資料庫
- MongoDB之資料查詢(巢狀集合)MongoDB巢狀
- MySQL之資料的簡單查詢MySql