1. 程式人生 > >gson將json轉為map的時候,出現型別轉換異常的解決方法

gson將json轉為map的時候,出現型別轉換異常的解決方法

    Type type = new TypeToken<Map<String, Object>>() {
    }.getType();
    Map<String, Object> dataMap = gson.fromJson(json, type);

呼叫以上程式碼把json串轉換為map時,如果json串中包含0、1等int型別的內容,map中將會轉成“0.0”、“1.0”等浮點型別。

可以通過一下方式消除這種型別轉換異常:

private static Gson gson = new GsonBuilder()
            .registerTypeAdapter(
                    new TypeToken<TreeMap<String, Object>>(){}.getType(),
                    new JsonDeserializer<TreeMap<String, Object>>() {
                        @Override
                        public TreeMap<String, Object> deserialize(
                                JsonElement json, Type typeOfT,
                                JsonDeserializationContext context) throws JsonParseException {

                            TreeMap<String, Object> treeMap = new TreeMap<>();
                            JsonObject jsonObject = json.getAsJsonObject();
                            Set<Map.Entry<String, JsonElement>> entrySet = jsonObject.entrySet();
                            for (Map.Entry<String, JsonElement> entry : entrySet) {
                                Object ot = entry.getValue();
                                if(ot instanceof JsonPrimitive){
                                    treeMap.put(entry.getKey(), ((JsonPrimitive) ot).getAsString());
                                }else{
                                    treeMap.put(entry.getKey(), ot);
                                }
                            }
                            return treeMap;
                        }
                    }).create();
    private static Type typeToken = new TypeToken<TreeMap<String, Object>>(){}.getType();

然後在轉換的地方這樣呼叫:

loadJSON(){
    TreeMap<String, Object> map =  gson.fromJson(json, typeToken);
    //bodyMap.get("error").toString();
    //Integer.parseInt(bodyMap.get("errno").toString());
}

相關推薦

gsonjson轉為map的時候出現型別轉換異常解決方法

Type type = new TypeToken<Map<String, Object>>() { }.getType(); Map<String, Object> dataMap = gson.fromJson(

用java程式碼寫xml檔案時出現中文亂碼的解決方法

phoneElement.addAttribute("name", "家庭電話");emailElement.setText("[email protected]");try {/*** 特別注意:* * java中有Writer類繼承下來的子類沒有提供編碼格式處理,所以dom4j也無法歲輸出的

關於使用renderInContext函式後出現low memory warning解決方法

為了epub閱讀器的新需求--模擬翻頁,需要使用函式renderInContext進行截圖,然後做模擬特效。當功能實現之後,在用iPad進行功能測試的時候,發現當翻頁次數到10頁左右(在iPhone上測試是翻頁30次才會出現記憶體警告,原因在於iPhone上面的螢幕截圖比

linux斷電後出現fsck失敗的解決方法

 os啟動的時候,會有個檢查filesystem是否正確的操作,如果發現filesystem is inconsistent,就會自動執行fsck,導致filesystem inconsistent的最主要的原因是power off,就是我們說的硬關機。     執行f

調用 SSPI 失敗請參見內部異常 解決方法

tro 解決方法 etc 分享 sys 棧跟蹤 net control provide 2017-11-12 12:49:53:706] OnServerConnectionAvailable error : System.Security.Authentication.A

devtools導致的型別轉換異常處理方法

問題描述: system.user.model.User cannot be cast to system.user.model.User 用了SpringBoot,整合了 Shrio 來做使用者的認證和授權,也引入了Mybatis的通用外掛等等。   起初並沒有遇到什麼困難,用Shir

記錄一次java.lang.ClassCastException的java型別轉換異常解決方案

自己的專案中,有個定時任務的模組,裡面需要將返回的物件強轉為某個實體類JobModel,可是在轉換的過程中,卻報出了java.lang.ClassCastException: com.jy.admin.server.mo

Assembly.LoadFrom載入程式集型別轉換失敗解決方法

為了讓我的wcf模組框架支援自定義通道上下文,對程式碼又進行了一次小型的重構,測試時發現型別轉換的錯誤,最後發現是loadfrom引起的。如果向 loadfrom 上下文中載入了一個程式集,則將啟用 loadfromcontext 託管除錯助手 (mda)。因為預設時載入程式集是在defaul上下文的,所以就

如何利用fastjsonJSON格式的字符串轉換Map再返回至前端成為js對象

數據結構 mem spring css 轉換 ring 註意 hash 結構 //註意,這裏的jsonStr是json格式的字符串,裏面如果遇到雙引號嵌套雙引號的,一般是嵌套的雙引號經過轉義 // \",假如有這樣的一個場景,這些字符串裏面有需要的css樣式的js對象

Java Gson 使用Gson字串轉為list

Gson 是 Google 提供的用來在 Java 物件和 JSON 資料之間進行對映的 Java 類庫。可以將一個 JSON 字串轉成一個 Java 物件,或者反過來。 物件轉為字串 String ps =gson.toJson(person); 字串轉為物件 Pers

net.sf.json.JSONObject轉為Bean時Boolean型別轉換問題解決

java bean如下:import java.util.Date; public class CmFinancingProductRatePeriod { private Long id; private Long productId; pr

Gsonjson資料直接轉為集合比如List(Kotlin版)

為了演示,我們新建一個簡單的資料類Person 資料類Person data class Person(var name: String = "", var age: Int = 0) json資料反序列化為普通物件 使用Gson將Json資料直接轉成普通實體類很簡單,如下

vue中的axios.post使用json資料傳輸出現請求頭欄位內容型別是不被允許的情況的解決方案

問題描述: 由於restful介面需要在頭部header傳遞兩個欄位: Content-Type: application/json Access-Token: 84c6635800b14e0eba4f7ece65e095a1 但是,在vue.js裡面配置: 執行傳送的時候出現: 意思是

前端用json形式實現了面向物件的程式設計json轉為CSV用於前端生成報表

前端程式碼的呼叫如下,封裝部分是怎麼寫的呢? JSonToCSV.setDataConver({                         data: jsonData,                         fileName: '銷售資料',      

FastJson用註解@JSONFieldjson轉為bean實體類bean實體類toString的時候欄位屬性名未變的錯誤分析

     這個更新了兩次,跳過分析可以直接看分割線後面的內容,即可解決。       今天遇到了一個奇怪的問題,使用FastJson的註解@JSONField的時候,出現了一個奇怪的問題。       我將json通過FastJson轉為bean的時候,由於json有些欄

把jsonString(為json物件)轉為map迴圈得到keyvalue

String str = "{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}"; //第一種方式 Map maps = (Map)JS

(精華)json數組和對象轉換成List和Map(小龍哥和牛徳鶴的對話)

put span ray add sonar string val out 和數 將java標準的數據結構ArrayList和HashMap轉換成json對象和數組很簡單 只需要JSONArray.fromObject(obj);或者JSONObject.fromObjec

利用GsonJSON數據進行格式化(pretty print)

div pretty string類型 overflow jsonp creat () one ons 我們可以利用Gson包將String類型的JSON數據進行格式化。 Gson gson = new GsonBuilder().setPrettyPrinting().

關於flexjsonjson轉為javabean的使用

nsf 一個 turn new onu || encode port decode 關於flexjson將json轉為javabean的使用 import java.sql.Timestamp; import java.util.Date; import flexj

使用java8的lambdalist轉為map(轉)

實體 nts acc UNC illegal identity 簡潔 tps username 常用方式 代碼如下: public Map<Long, String> getIdNameMap(List<Account> accounts)