大家好,又见面了,我是你们的朋友全栈君。
业务背景:因为要嵌套一些数据报表,页面点击菜单直接进行url访问,因访问受限要修改url权限,返回数据是JSONObject,防止出现异常,后台进行了一些Map于JSONObject的转换,记录下来
配置得json文件格式:
代码语言:javascript复制{"redashLinks": [
{
"name": "在盈利表",
"url": "http://ip/public/dashboards/share/fQUPgt8oLyuunojAEVUzsGn8G9bOYVNFl2KuZzsv"
},
{
"name": "在亏损表",
"url": "http://ip/public/dashboards/share/qDsDeOM0JMomy3ZgCEhxnPYWgzCpiMp93KfYRvhT"
}
]
}
将得到的json数据转换处理
代码语言:javascript复制// 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的包
代码语言:javascript复制/**
* 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中的包路径见下方
代码语言:javascript复制 ObjectMapper mapper = new ObjectMapper();
String writeValueAsString = mapper.writeValueAsString(jsonMap);
转换完成后发现是String类型,加一步 String转换jsonObject
代码语言:javascript复制JSONObject.parseObject(writeValueAsString)
pom中引用的包路径:
代码语言:javascript复制 <!-- 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>
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172458.html原文链接:https://javaforall.cn