一、jsonparseobject泛型
public static <T> T parseObject(String json, Class<T> clazz)
json.parseobject()是阿里巴巴fastjson中的一個方法,其中最重要的參數是json字符串和要轉換成的類類型Class<T>,使用這個方法可以將一個JSON字符串轉換成指定的java對象
clazz是一個泛型,和json字符串的格式對應,即如果json字符串的格式對應一個java對象,那麼就能通過反射構建一個對象,把json字符串中的值填充到這個對象屬性中。如果json字符串不是一個標準的json格式,或者json字符串中的屬性名在clazz對應的java對象中不存在,都會引起異常。
比如下面的代碼,將json字符串轉換成一個Person對象:
public class Person { private String name; private int age; private boolean male; // getter, setter } String jsonStr = "{\"name\":\"Tom\",\"age\":25,\"male\":true}"; Person person = JSON.parseObject(jsonStr, Person.class);
其中的json字符串是一個鍵值對的格式,對應clazz中Person類的成員變量,最終生成的person對象的屬性值如下:
person.name = "Tom"; person.age = 25; person.male = true;
二、jsonparseobject轉對象
public static JSONObject parseObject(String text)
JSON.parseObject()方法還可以將json字符串轉換成JSONObject對象。
JSONObject是一個JavaBean,可以使用getter和setter方法獲取和設置不同類型的數據,比如字符串、數字等等。與普通的Java對象不同的是,JSONObject的屬性名和屬性值不需要在定義時指定,而是在使用getter和setter方法時傳入。一個JSONObject對象通常用於封裝一個json字符串的某一部分數據。
下面是一個使用JSON.parseObject()方法將json字符串轉換成JSONObject對象的例子:
String jsonStr = "{\"name\":\"Tom\",\"age\":25,\"male\":true}"; JSONObject jsonObj = JSON.parseObject(jsonStr); System.out.println(jsonObj.getString("name")); // "Tom" System.out.println(jsonObj.getIntValue("age")); // 25 System.out.println(jsonObj.getBooleanValue("male")); // true
三、jsonparseobject轉對象報錯
在使用json.parseobject()方法時,有可能會遇到轉換異常的情況,這時候需要根據錯誤信息來分析原因。
一種常見的錯誤是:反射時找不到某一個屬性,則調用返回null,而null無法轉換成基本數據類型或者對象類型,導致異常。
下面是一個在使用json.parseobject()方法時出現異常的例子:
public class User { private String username; private int age; // getter, setter } String jsonStr = "{\"username\":\"Tom\"}"; User user = JSON.parseObject(jsonStr, User.class);
運行上述代碼會拋出一個「java.lang.NumberFormatException: null」的異常,原因是json字符串中缺少age屬性,且age為int類型,沒有默認值。為了避免這種異常,可以給age屬性設置默認值,如下:
public class User { private String username; private int age = 0; // 設置默認值 // getter, setter } String jsonStr = "{\"username\":\"Tom\"}"; User user = JSON.parseObject(jsonStr, User.class); System.out.println(user.getAge()); // 0
四、jsonparseobject轉換map報錯
json.parseobject()方法還可以將json字符串轉換成Map對象。但是在轉換過程中,如果屬性名為null或者””,在java中這些屬性將不能作為Map的key值。因此,可能會出現「java.lang.NullPointerException」異常。
為了避免這種異常,可以將屬性名為null或者””的屬性移除,或者從json字符串中刪除這些屬性。
下面是一個在使用json.parseobject()方法時出現異常的例子:
String jsonStr = "{\"name\":\"Tom\",\"\":23}"; Map<String, Object> map = JSON.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){});
運行上述代碼會拋出一個「java.lang.NullPointerException」的異常,原因是json字符串中出現了空字符串””的屬性名。為了避免這種異常,可以使用remove方法移除屬性名為null或者””的屬性:
String jsonStr = "{\"name\":\"Tom\",\"\":23}"; JSONObject jsonObj = JSON.parseObject(jsonStr); jsonObj.remove(""); Map<String, Object> map = JSONObject.toJavaObject(jsonObj, new TypeReference<Map<String, Object>>(){}); System.out.println(map.get("name")); // Tom System.out.println(map.get("")); // null
五、總結
json.parseobject()是一個非常有用的方法,可以將json字符串轉換成Java對象、JSONObject對象或者Map對象。在使用時,需要注意json字符串的格式是否符合要求,需要根據不同的情況調整泛型類型或者修改json字符串。
原創文章,作者:XTCDQ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/361546.html