業務背景:因為要嵌套一些資料報表,頁面點選菜單直接進行url通路,因通路受限要修改url權限,傳回資料是JSONObject,防止出現異常,背景進行了一些Map于JSONObject的轉換,記錄下來
配置得json檔案格式:
{"redashLinks": [
{
"name": "在盈利表",
"url": "http://ip/public/dashboards/share/fQUPgt8oLyuunojAEVUzsGn8G9bOYVNFl2KuZzsv"
},
{
"name": "在虧損表",
"url": "http://ip/public/dashboards/share/qDsDeOM0JMomy3ZgCEhxnPYWgzCpiMp93KfYRvhT"
}
]
}
将得到的json資料轉換處理
// jsonobject 轉換 map
Map<String,Object> jsonMap = jsonStrToMap(jsonObjFromResource);
// map 轉換 String
ObjectMapper mapper = new ObjectMapper();
String writeValueAsString = mapper.writeValueAsString(jsonMap);
// String 轉換 JSONObject
return JSONObject.parseObject(writeValueAsString);
第一步:将擷取得jsonobject轉換map,在url中改造
引入的都是util的包
/**
* json轉換改造url
* @param json 擷取得json檔案
* @return
*/
@SuppressWarnings("unchecked")
private Map<String,Object> jsonStrToMap(JSONObject json) {
Map<String, String> apiKey = getApiKey();
Map<String, Object> data = new HashMap<>();// 循環轉換
Iterator<Entry<String, Object>> it = json.entrySet().iterator();
while (it.hasNext()) {
List<Map<String, String>> listMap = new ArrayList<Map<String, String>>();
Map.Entry<String, Object> entry = (Entry<String, Object>) it.next();
List<Map<String, String>> list = (List<Map<String, String>>) entry.getValue();
for (Map<String, String> map : list) {
Map<String, String> newMap = new HashMap<String,String>();
StringBuffer str = new StringBuffer();
/* 位址拼接key */
str.append(map.get("url"));
str.append("?key=");
str.append(apiKey.get("api_key"));
newMap.put(map.get("name"), str.toString());
listMap.add(newMap);
}
data.put(entry.getKey(), listMap);
}
return data;
}
第二步,将傳回的map轉回jsonobject
引入的包:import com.fasterxml.jackson.databind.ObjectMapper; pom中的包路徑見下方
ObjectMapper mapper = new ObjectMapper();
String writeValueAsString = mapper.writeValueAsString(jsonMap);
轉換完成後發現是String類型,加一步 String轉換jsonObject
JSONObject.parseObject(writeValueAsString)
pom中引用的包路徑:
<!-- jackson json 優化緩存對象序列化 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>