整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          使用Jackson將JSON字符串轉換為Java Map

          Java開發中,處理JSON數據是一項常見的任務。Jackson庫是一個強大的JSON處理工具,它提供了將JSON字符串解析為Java對象的能力,包括Map類型。這篇博客將詳細介紹如何使用Jackson庫將JSON字符串轉換為Java的Map對象。

          1. Jackson簡介

          Jackson是由FasterXML團隊開發的一個高性能的JSON處理器,它提供了多種API,包括ObjectMapper,用于在Java對象和JSON之間進行序列化和反序列化。Jackson庫不僅支持基本數據類型,還支持復雜的對象結構,如Map和自定義Java類。

          2. 添加Jackson依賴

          首先,確保你的項目中已經包含了Jackson庫。如果你使用的是Maven,可以在pom.xml文件中添加以下依賴:

          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-databind</artifactId>
              <version>2.13.3</version> <!-- 請確保使用最新版本 -->
          </dependency>

          3. JSON字符串轉Map

          要將JSON字符串轉換為Map,我們需要使用ObjectMapper類的readValue方法。這是一個示例:

          import com.fasterxml.jackson.databind.ObjectMapper;
          import java.io.IOException;
          import java.util.Map;
          
          public class JsonToMapExample {
          
              public static void main(String[] args) {
                  String jsonString = "{\"key1\":\"value1\", \"key2\":\"value2\"}";
          
                  ObjectMapper mapper = new ObjectMapper();
                  try {
                      Map<String, String> map = mapper.readValue(jsonString, Map.class);
                      System.out.println(map);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }

          在這個例子中,我們創建了一個ObjectMapper實例,然后調用readValue方法,傳入JSON字符串和目標類型Map.class。readValue方法會返回一個Map對象,其中鍵是JSON對象的鍵,值是對應的值。

          4. 處理嵌套JSON

          如果JSON字符串包含嵌套的對象或數組,Jackson可以自動處理這些復雜結構。例如,如果JSON字符串是:

          {
            "name": "John",
            "age": 30,
            "city": {
              "name": "New York",
              "population": 8500000
            },
            "hobbies": ["reading", "gaming"]
          }

          你可以將Map<String, Object>作為目標類型,Jackson會將嵌套的對象轉換為Map,將數組轉換為List。

          Map<String, Object> map = mapper.readValue(jsonString, Map.class);

          5. 錯誤處理

          在使用readValue方法時,可能會遇到JSON格式錯誤或其他解析問題。在上面的示例中,我們捕獲了IOException,這是readValue方法可能拋出的異常類型。在實際應用中,你應該根據具體需求適當地處理這些異常。

          6. 性能優化

          Jackson庫提供了多種性能優化選項,例如啟用DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS來處理浮點數,或者禁用不需要的特性以提高速度。在處理大量數據時,這些設置可以顯著影響性能。

          結論

          通過Jackson庫,我們可以輕松地將JSON字符串轉換為Java Map對象,從而方便地處理JSON數據。理解如何使用ObjectMapper和readValue方法是Java開發中處理JSON的基礎,也是提升效率的關鍵。記得在實際項目中根據需要進行異常處理和性能優化。

          發中,小伙伴一定經常遇到將一個Object類型的字段轉換為String類型的字段。比如我們從一個類型定義為Map<String, Object>的集合中獲取value值,將其設置到一個對應值為String類型的對象中返回前端,那這個時候就要把取出來的object值轉換為String了。

          Object轉換為String的方式有如下幾種:

          • (String)object
          • object.toString()
          • Stirng.valueOf(object)
          • ""+object

          我們暫且先不討論哪種好,哪種不好,我們先認真考慮下從map中get出來的value值存在幾種情況。

          如果這個map是上游系統給我們的,秉持不相信上游系統的原則,那么某一個key為type對應的value值可能存在如下幾種情況:

          1. value為字符串,符合傳遞要求
          2. value為其他類型,比如為Integer類型
          3. value為空字符串
          4. value為空格
          5. value沒傳值,默認為null
          6. map中不包含這個key

          針對這些情況,接下來我們具體分析Object轉換為String的方式。

          (String)object

          (String)object是將Object類型的對象強制轉換為String類型。

          對于空格、空字符串、null都可以轉換,但是Object對象的值類型不是字符串比如Integer類型時,會存在類型轉換異常錯誤。

           public static void main(String[] args) {
                  /**
                   * 為了兼容各種參數,map的value值定義為了Object類型
                   * 針對一個key為type的值,它的value存在以下幾種情況:
                   * 1)value為字符串
                   * 2)value為空字符串
                   * 3)value為空格
                   * 4)value沒傳值,默認為null
                   * 5)map中不包含這個key
                   */
                  Map<String, Object> mapParams = new HashMap<String, Object>();
                  TypeEntity entity = new TypeEntity();
                  /**
                   * 強制類型轉換
                   */
                  mapParams.put("type",1);
                  System.out.println("使用強制類型轉換的結果為:" + (String) mapParams.get("type")) ;
           }
          

          運行結果為:

          Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
              at com.alipay.demo.StringTest.main(StringTest.java:30)
          

          總結:

          強制類型轉換這種方式如果上游系統不是自己團隊的盡量不要使用,很容易因為數據類型不一致轉換報錯。

          object.toString()

          object.toString()對空格、空字符串、其他數據類型都可以進行轉換。需要注意,值為null時的空指針異常。

           /**
           * toString()
           */
          mapParams.put("type", null);
          System.out.println("toString()轉換的結果為:" + mapParams.get("type").toString());
          

          運行結果為:

          Exception in thread "main" java.lang.NullPointerException
              at com.alipay.demo.StringTest.main(StringTest.java:39)
          

          總結:

          我們在使用object.toString()需要對獲取的value值先進行null的判斷再轉換。值為null的場景有兩種情況:key對應的value值為null或者map中不存在這個key值。

          Stirng.valueOf(object)

          Stirng.valueOf(object)可以對null、空格、空字符串、其他數據類型進行轉換,是一個比較安全的轉換方法。

          需要注意的是當值為null的時候該方法會轉換為"null",這個值會影響業務后續的非空判斷。

          我們查看Stirng.valueOf()方法的源碼:

           public static String valueOf(Object obj) {
                  return (obj == null) ? "null" : obj.toString();
              }
          

          valueOf()方法本質是使用的obj.toString(),對于可能存在的空指針異常進行了判斷規避。

          但是轉換的"null"可能會對我們的業務進行干擾,在使用這個方法的時候需要先判斷結果是否為null再進行轉換,當然如果沒有業務允許也可以不進行判斷。

           /**
           * Stirng.valueOf(object)
           */
          mapParams.put("type", null);
          System.out.println("Stirng.valueOf(object)轉換的結果為:" + String.valueOf(mapParams.get("type")));
          System.out.println(String.valueOf(mapParams.get("type")) == null);
          System.out.println("null".equals(String.valueOf(mapParams.get("type"))));
          

          運行結果為:

          Stirng.valueOf(object)轉換的結果為:null
          false
          true
          

          總結:

          Stirng.valueOf(object)是比較安全的轉換方式,但是需要特別注意當值為null的時候轉換為"null",避免對業務進行干擾,在使用的時候最好是加上判斷。

          ""+object

          ""+object此方法是利用字符串的拼接特點將其他類型的數據轉換為字符串,它和Stirng.valueOf(object)類似不用考慮空格、空字符串、null、和其他數據類型,但是需要注意當值為null的時候會轉換為"null"。

           /**
           * ""+object
           */
          mapParams.put("type", null);
          System.out.println(""+mapParams.get("type"));
          System.out.println((""+mapParams.get("type")) == null);
          System.out.println("null".equals((""+mapParams.get("type"))));
          

          運行結果為:

          null
          false
          true
          

          今天就到這里了!

          我是勾勾,愿您認真工作,快樂生活,開心每一天!

          我們下篇文章見!

          在日常前后端開發數據交互中常常使用JSON來作數據交互,Fastjson 是一個在JAVA后端中常用到的庫,提供服務器端、安卓客戶端兩種解析工具,性能表現較好。

          下面介紹一下基礎用戶和她的簡單轉換:

          配置 maven 依賴或者直接去maven 倉庫中下載:

          <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>fastjson</artifactId>
              <version>x.x.x</version>
          </dependency>

          簡單轉換:

          對象與字符串之間的轉換

          //將對象轉換成為字符串 
          String strUserInfo = JSON.toJSONString(UserInfo); 
          //字符串轉換成為對象 
          InfoDo UserInfo = JSON.parseObject(strUserInfo, UserInfo.class);

          對象集合與字符串的轉換

          //將對象集合轉換成為字符串 
          String users = JSON.toJSONString(users); 
          //將字符串轉換成為對象集合
           List userList = JSON.parseArray(userStr, User.class);

          字符串與JSONObject的轉換

          //String 轉 Json對象 
          JSONObject jsonObject = JSONObject.parseObject(str);
          //json對象轉string 
          String jsonString = jsonObject.toJSONString();// jsonObject為JSON對象

          map字符串的轉換

          //字符串轉jsonObject
          JSONObject  jsonObject = JSONObject.parseObject(str);
          //json對象轉Map
           Map<String,Object> map = (Map<String,Object>)jsonObject;
           //map轉字符串 
          String jsonString = JSON.toJSONString(map);

          Map 轉 Json對象


          主站蜘蛛池模板: 国产无套精品一区二区 | 无码人妻精品一区二区| 日本人的色道www免费一区| 国模一区二区三区| 国产精品自在拍一区二区不卡| 无码日韩精品一区二区免费暖暖 | 免费一区二区三区在线视频| 亚洲熟妇av一区二区三区| 亚洲制服丝袜一区二区三区| 亚洲午夜一区二区三区| 成人精品一区二区三区不卡免费看 | 国产一区二区在线|播放| 久久精品国产一区二区| 日本高清一区二区三区| 亚洲欧洲精品一区二区三区| 在线观看国产区亚洲一区成人| 韩国女主播一区二区| 国产免费伦精品一区二区三区| 亚洲爆乳精品无码一区二区 | 无码精品黑人一区二区三区 | 日韩精品一区二区三区色欲AV| 91精品乱码一区二区三区| 91国偷自产一区二区三区| 99精品久久精品一区二区| 欧洲亚洲综合一区二区三区| 中文字幕一区二区三区在线观看| 国产精品女同一区二区| 亚洲av乱码一区二区三区按摩| 福利片福利一区二区三区| 波多野结衣中文字幕一区| 国产成人无码一区二区三区 | 国产乱码精品一区三上 | 精品深夜AV无码一区二区| 国产人妖在线观看一区二区| 色多多免费视频观看区一区| 麻豆AV一区二区三区久久| 无码国产伦一区二区三区视频| 日本高清不卡一区| 一级毛片完整版免费播放一区| 亚洲午夜精品一区二区| 亚洲日韩AV一区二区三区中文|