今天寫接口遇到一個問題,前段傳過來的密文解密之後,生成的字符串中不包含引號,所以直接轉換成Json的時候報錯了。網上找了半天,也沒發現有什麼好的方法去解決,所以就用基礎的套路,自己轉換字符串。
解密之後的字符串是下面這個樣子的:
String jsonStr = "{appkey:zkkOpNJ1Jo,adtype:1,appid:33e496d5fec,deviceid:15d994b}";
直接JSONObject jsonObject = JSONObject.fromObject(jsonStr)就會報錯。如果截取字段,又覺得麻煩,於是就采用了替換的方式,代碼如下:
jsonStr = jsonStr.replace("{", "{\"");
jsonStr = jsonStr.replace(":", "\":\"");
jsonStr = jsonStr.replace(",", "\",\"");
jsonStr = jsonStr.replace("}", "\"}");
這樣就可以給各個每處節點都加上了引號,然後再轉換成Json
JSONObject jsonObject = JSONObject.fromObject(jsonStr);
System.out.println("轉換後:"+jsonObject);
當我以為已經搞定的時候,又出現了新的情況,在另一個接口中解密出的字符串如下:
String jsonStr = "{mac:98:3b:16:fe:44:70,men:1761MB,storage:3921.16MB,deviceid:15d994b1}";
由於mac中的值中包含有“:”,所以拿第一種方法來解決處理的時候果斷報錯。想了一會,沒有好的想法,就用了笨方法,截取!先以逗號分隔成數組,然後再分別截取數組中第一個分號前後的內容,並用StringBuffer拼接。代碼如下:
String jsonStr = "{mac:98:3b:16:fe:44:70,men:1761MB,storage:3921.16MB,deviceid:15d994b1}";
System.out.println("轉換前:" + jsonStr);
jsonStr = jsonStr.substring(1, jsonStr.length() - 1);
String[] strs = jsonStr.split(",");
StringBuffer stringBuffer = new StringBuffer("{");
for (int i = 0; i < strs.length; i++) {
stringBuffer.append("\""
+ strs[i].substring(0, strs[i].indexOf(":")) + "\":\""
+ strs[i].substring(strs[i].indexOf(":") + 1) + "\",");
System.out.println(strs[i].substring(0, strs[i].indexOf(":"))
+ " = " + strs[i].substring(strs[i].indexOf(":") + 1));
}
stringBuffer.replace(stringBuffer.length() - 1,stringBuffer.length(), "}");
JSONObject jsonObject = JSONObject.fromObject(stringBuffer.toString());
System.out.println("轉換後:" + jsonObject);
雖然方法笨一點,但是也達到了效果。
貼出來分享一下,大牛們有沒有更好的實現方法呢?歡迎批評指正。