json.parseobject()的使用詳解

一、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-tw/n/361546.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XTCDQ的頭像XTCDQ
上一篇 2025-02-25 18:17
下一篇 2025-02-25 18:17

相關推薦

  • JSON的MD5

    在Web開發過程中,JSON(JavaScript Object Notation)是最常用的數據格式之一。MD5(Message-Digest Algorithm 5)是一種常用…

    編程 2025-04-29
  • 使用Java將JSON寫入HDFS

    本篇文章將從以下幾個方面詳細闡述Java將JSON寫入HDFS的方法: 一、HDFS簡介 首先,先來了解一下Hadoop分散式文件系統(HDFS)。HDFS是一個可擴展性高的分散式…

    編程 2025-04-29
  • 如何使用Newtonsoft datatable轉Json

    Newtonsoft DataTable 是一個基於.NET的JSON框架,也是一個用於序列化和反序列化JSON的強大工具。 在本文中,我們將學習如何使用Newtonsoft Da…

    編程 2025-04-28
  • JPRC – 輕鬆創建可讀性強的 JSON API

    本文將介紹一個全新的 JSON API 框架 JPRC,通過該框架,您可以輕鬆創建可讀性強的 JSON API,提高您的項目開發效率和代碼可維護性。接下來將從以下幾個方面對 JPR…

    編程 2025-04-27
  • Python存為JSON的方法及實例

    本文將從以下多個方面對Python存為JSON做詳細的闡述。 一、JSON簡介 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易於人閱…

    編程 2025-04-27
  • 使用Python獲取JSON並解析

    本文將介紹如何使用Python獲取JSON數據並解析相關內容。通過使用Python的第三方庫,我們可以輕鬆地處理JSON數據,包括讀取、提取和操作JSON數據。 一、獲取JSON數…

    編程 2025-04-27
  • 使用Spread 8展示JSON數據

    使用Spread 8可以方便地展示JSON數據,本文將詳細介紹如何利用Spread 8展示JSON數據。 一、Spread 8簡介 Spread 8是一款強大的電子表格軟體,可以方…

    編程 2025-04-27
  • 如何在json轉實體類時忽略大小寫

    本文將從以下幾個方面介紹如何在json轉實體類時忽略大小寫。 一、使用Gson庫實現json轉實體類忽略大小寫 Gson是Google提供的Java JSON操作庫,它提供了簡單易…

    編程 2025-04-27
  • C# 中 JSON null 不顯示的處理方法

    本文將為大家介紹在 C# 中處理 JSON null 不顯示的解決方法。 一、null 不顯示的問題 在使用 C# 進行 JSON 數據處理的時候,經常會遇到 null 值不顯示的…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25

發表回復

登錄後才能評論