Map.toString()之後生成的字串如何轉回Map
阿新 • • 發佈:2021-08-02
眾所周知,Map.toString()方法返回的字串有點個性,如下:
{legalName=張XXX, idBase=0, legalIdCard=340404198X1223103X}
而我們一般需要的是這種:
{"legalName":"張XXX","idBase":"0","legalIdCard":"340404198X1223103X"}
而一旦使用了Map的toString()是無法再通過任何方法轉回來map的,在此之前我曾經使用過
net.sf.json.JSONObject.fromObject(map.toString()).toString())
我天真的以為這是可以的,結果明顯不行,不支援中文且轉出來的value不帶雙引號 ""
經過研究推出如下方法:
public Map<String,Object> mapStringToMap(String stringMap){ Map<String,Object> map = new HashMap<>(); String[] strings = stringMap.split(","); for (String str : strings) { String[] s = str.split("="); map.put(s[0],s[1]); } return map; }
測試類如下:
@Test public void test1(){ Map map = new HashMap(); map.put("legalName","張XXX"); map.put("idBase","0"); map.put("legalIdCard","340404198X1223103X"); System.out.println(JSON.toJSONString(map)); // System.out.println(((JSONObject) JSON.toJSON(map)).toString()); System.out.println("map.tosting: " + map.toString()); Map<String, Object> stringObjectMap = mapStringToMap(map.toString().replaceAll("[{]","").replaceAll("[}]","")); System.out.println(JSON.toJSONString(stringObjectMap).replaceAll(" ","")); }
結果如下:
{"legalName":"張XXX","idBase":"0","legalIdCard":"340404198X1223103X"}
map.tosting: {legalName=張XXX, idBase=0, legalIdCard=340404198X1223103X}
{"legalName":"張XXX","idBase":"0","legalIdCard":"340404198X1223103X"}
可見是可行的,但網上很多方法都忽略了很多細節,比如{}需要去掉如若不去掉轉換出來的map是巢狀{{}}的,多了一層{},
{"{legalName":"張XXX","idBase":"0","legalIdCard":"340404198X1223103X}"}
又比如最終轉回來需要的字串要去掉空格,否則效果如下:
{"legalName":"張XXX"," idBase":"0"," legalIdCard":"340404198X1223103X"}
注意看是有空格的。
至此,結束。