什么是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/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

发表回复

登录后才能评论