什麼是Json序列化

Json(JavaScript Object Notation)是一種輕量級的數據交換格式,易於讀寫,便於機器解析和生成。Json序列化就是將對象或數據結構轉換成Json格式的字符串。Json序列化後數據傳輸、存儲和處理都更方便。

Json序列化

Json序列化是指將一個對象序列化為Json格式的字符串。Json格式的字符串一般具有這樣的特徵:

{
    "name": "Tom",
    "age": 23,
    "gender": "Male"
}

對象可以是類對象,也可以是數組、字典等數據結構。通過Json序列化可以將對象轉換為Json字符串,存儲到文件中,也可以在網絡通信中傳輸。

Json反序列化是什麼意思

Json反序列化是指將一個Json格式的字符串轉換為對象。Json格式的字符串可以通過網絡通信獲取,也可以從文件中讀取。

String jsonStr = "{\n" +
        "    \"name\": \"Tom\",\n" +
        "    \"age\": 23,\n" +
        "    \"gender\": \"Male\"\n" +
        "}";
Gson gson = new Gson();
Person person = gson.fromJson(jsonStr, Person.class);

Json反序列化常用工具類庫有Json、Gson、FastJson等。

Json為什麼要序列化

Json序列化是為了解決數據的傳輸、存儲和處理問題。傳輸數據需要解決數據的格式問題,不同的語言和平台對數據的處理方式不一樣,要想在兩個平台或不同語言之間進行數據傳輸,就需要一個通用的數據格式。存儲數據也需要解決數據的格式問題。處理數據需要快速的處理大量數據,Json格式的數據可以快速進行讀取、遍歷、操作和篩選。

可序列化是什麼意思

可序列化是指一個類對象可以序列化。一個類對象要想序列化和反序列化,需要滿足Java序列化標準,即實現Serializable接口。如果不實現該接口,該對象就不能進行序列化。

// 可序列化類
public class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private Integer age;
    private String gender;
    // 省略getter和setter方法
}

// 不可序列化類
public class Animal {
    private String name;
    private Integer age;
    private String gender;
    // 省略getter和setter方法
}

Json反序列化失敗是什麼意思

Json反序列化失敗是指將一個Json格式的字符串轉換成Java對象失敗。反序列化失敗的原因有很多,比如Json格式錯誤、Java對象類結構不匹配、格式類型不匹配等。一般通過捕捉異常或者判空來解決反序列化失敗問題。

String jsonStr = "{\n" +
        "    \"name\": \"Tom\",\n" +
        "}";
Gson gson = new Gson();
Person person = null;
try {
    person = gson.fromJson(jsonStr, Person.class);
} catch (JsonSyntaxException e) {
    e.printStackTrace();
    System.out.println("json格式錯誤");
}
if (person == null) {
    System.out.println("json反序列化失敗");
}

Json序列化和反序列化方法選取

Json序列化和反序列化方法有很多種,常見的有Java自帶的序列化和Gson的序列化。Java自帶的序列化需要實現Serializable接口,但是序列化體積大、序列化速度慢、面向Java對象,不支持跨平台。Gson序列化有很高的可擴展性,序列化體積小、速度快,支持跨語言和平台,但是不能序列化內部類和匿名類。

// 使用java自帶序列化
public class SerializeUtil {
    public static byte[] serialize(Object obj) throws IOException {
        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
        ObjectOutputStream objStream = new ObjectOutputStream(byteStream);
        objStream.writeObject(obj);
        objStream.flush();
        byte[] bytes = byteStream.toByteArray();
        objStream.close();
        byteStream.close();
        return bytes;
    }

    public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
        ByteArrayInputStream byteStream = new ByteArrayInputStream(bytes);
        ObjectInputStream objStream = new ObjectInputStream(byteStream);
        Object obj = objStream.readObject();
        objStream.close();
        byteStream.close();
        return obj;
    }
}

// 使用Gson序列化
String jsonStr = gson.toJson(person);
person = gson.fromJson(jsonStr, Person.class);

根據實際情況,選擇合適的序列化方法。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/304865.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-01 11:06
下一篇 2025-01-01 11:06

相關推薦

  • 金額選擇性序列化

    本文將從多個方面對金額選擇性序列化進行詳細闡述,包括其定義、使用場景、實現方法等。 一、定義 金額選擇性序列化指根據傳入的金額值,選擇是否進行序列化,以達到減少數據傳輸的目的。在實…

    編程 2025-04-29
  • 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
  • 理解Java反序列化(Java Deserialization Vulnerability)

    本文將從多個方面深入探討Java反序列化漏洞,對於筆者所總結的經驗和教訓,以及掌握Java反序列化的設計模式、最佳實踐和防範措施。 一、Java反序列化漏洞概述 Java反序列化漏…

    編程 2025-04-28
  • 如何使用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數據並解析相關內容。通過使用Python的第三方庫,我們可以輕鬆地處理JSON數據,包括讀取、提取和操作JSON數據。 一、獲取JSON數…

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

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

    編程 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

發表回復

登錄後才能評論