歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

缺少雙引號的字符串轉換成Json對象

今天寫接口遇到一個問題,前段傳過來的密文解密之後,生成的字符串中不包含引號,所以直接轉換成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);

雖然方法笨一點,但是也達到了效果。
貼出來分享一下,大牛們有沒有更好的實現方法呢?歡迎批評指正。

Copyright © Linux教程網 All Rights Reserved