用java请求接口使用post请求,json格式

【用java请求接口使用post请求,json格式】项目中用到双层map存储数据,在转换json的过程中,首先是出现双层map转换json出现问题,在这里,我查了好久,然后找到解决方法:
String jsons = JSON.toJSONString(map); String params = StringEscapeUtils.unescapeJava(jsons);
上面代码中,map是双层map数据,重点是第二句,才转换成功,但是在转换之后,发现转换出来的格式不正确,多了一对双引号:

转换前:{sign=39CC9AED395C0AE4E831F592EBBCB451, params={appKey=E39854D25C234300BCA26774205DE545, timestamp=1575352832709}} 转换后:{"sign":"39CC9AED395C0AE4E831F592EBBCB451","params":“{"appKey":"E39854D25C234300BCA26774205DE545","timestamp":"1575352832709"}”}

多了一对双引号,在网上找了好久,这个问题没有找到解决方案,然后想起来之前在解决上一个问题的时候,有提到SortedMap,第二个定义为obj,不给明确定义,这样的话,后续都可以有更多的可能去操作,因为在之后是我将第一层map转换json后,存入的map。这里第二个变量obj就起到作用了,在用obj之前,是没有办法直接在map中存放map 的,我第二个变量用obj之后,第一个map就直接放在了里面,这样的话就是在后续只做了一个json转换,这样就解决了多一层双引号的问题,解决后,考虑可能是因为第一次map转换后,放入map,再进行转换,会将第一个map当作一个value值放入,因此引发的以上问题,下面贴代码,仅解决转换问题。
public String getToken() throws ParseException, IOException { SortedMap map = new TreeMap<>(new Comparator() { public int compare(String obj1, String obj2) { // 降序排序 return obj2.compareTo(obj1); } }); SortedMap map2 = new TreeMap<>(); map2.put("appKey", appkey); map2.put("timestamp", time); String sign = md5Service.createSign(map2, appSecret); //String json = JSON.toJSONString(map2); map.put("params", map2); map.put("sign", sign); String jsons = JSON.toJSONString(map); String params = StringEscapeUtils.unescapeJava(jsons); String token = HttpClientUtil.sendPost(URL, map); //System.out.println(params); return token;

    推荐阅读