天天看點

Map與JSONObject對象互相轉換記錄

業務背景:因為要嵌套一些資料報表,頁面點選菜單直接進行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>