JSON的序列化和反序列化

JSON的序列化和反序列化什么是 JSONJSON JavaScriptOb 是一种轻量级的数据交换格式 广泛应用于前后端的接口数据格式

大家好,欢迎来到IT知识分享网。

一、什么是JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简单、易读、易写而被广泛采用。它通过键值对和数组的方式表示数据,能够高效地在前后端之间传输数据,并且大多数编程语言都支持 JSON 格式。JSON 主要用于前后端数据交换、配置文件存储和 API 设计等场景,使得数据处理变得直观和一致。

二、序列化

序列化就是将对象转换为JSON格式的字符串。在python中可以直接导入JSON模块使用,这里以python为例

import json class Person: def __init__(self, name, age,gender): self.name = name self.age = age self.gender = gender def __str__(self) -> str: return f"Person(name = { 
     self.name},age = { 
     self.age},gender = { 
     self.gender})" def test(self): print("My name is ",self.name) if __name__ == "__main__": p = Person("张三", 20,"男") json_string = json.dumps(p.__dict__,ensure_ascii=False) print(json_string) #输出结果为{"name": "张三", "age": 20, "gender": "男"} 

可以看到将python中的一个对象转为了JSON字符串,但是由于JSON默认采用的编码为ASCII,所以在出现中文时,可能会出现一段类似于"\u5f20\u4e09"的字符串,但是这并不影响,因为反序列化时,也使用ASCII,一人会被正确显示。如果觉得影响,可以禁用ASCII使用UTF-8,这样就可以正常显示中文。

Python中通过函数dumps将python对象转换为JSON字符串。

序列化的底层原理就是数据类型检查与处理、递归处理复杂数据结构。

首先识别数据的类型,例如字典、列表、字符串、数字、布尔值等。将其转换为JSON中对应的对象。例如字典和列表会被转换为对应的 JSON 对象和 JSON 数组。如果遇到数据嵌套,会不断向下递归。如果遇到无法处理的数据类型,会调用默认的default()方法进行处理。再通过指定编码为字符串返回。

二、反序列化

import json class Person: def __init__(self, name, age,gender): self.name = name self.age = age self.gender = gender def __str__(self) -> str: return f"Person(name = { 
     self.name},age = { 
     self.age},gender = { 
     self.gender})" def test(self): print("My name is ",self.name) if __name__ == "__main__": p = Person("张三", 20,"男") json_string = json.dumps(p.__dict__,ensure_ascii=False) object_dict = json.loads(json_string) p1 = Person(object_dict) p1.test() #输出My name is 张三  

注意这里的反序列化返回的是一个字典对象,而不是Person对象。

四、自定义序列化

import json class PersonEncoder(json.JSONEncoder): def default(self, obj): '''自定义序列化器''' if isinstance(obj, Person): return obj.__dict__ return super().default(obj) class Person: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender def __str__(self) -> str: return f"Person(name={ 
     self.name}, age={ 
     self.age}, gender={ 
     self.gender})" def test(self): print("My name is", self.name) def person_decoder(obj): '''自定义解码器''' try: return Person(obj) except TypeError as e: raise TypeError(f"类型 { 
     type(obj)} 无法被正确解码: { 
     e}") if __name__ == "__main__": p = Person("张三", 20, "男") json_string = json.dumps(p, cls=PersonEncoder, ensure_ascii=False) print(json_string) person_obj = json.loads(json_string, object_hook=person_decoder) person_obj.test() 

自定义序列化器通过继承 json.JSONEncoder 类并重写 default 方法,来实现对特定对象类型的定制化 JSON 序列化。default 方法接收一个对象作为参数,并将该对象转换为可序列化的基本数据类型(如字典、列表、字符串等)。如果 default 方法遇到不支持的类型,可以调用父类的 default 方法以处理其他情况。通过这种方式,自定义序列化器可以将复杂的用户定义对象转换为 JSON 字符串,从而满足特定的序列化需求。

五、总结

JSON广泛应用于现代软件开发中,尤其是在前后端数据交互和配置文件处理方面。其主要特点包括易于阅读和编写、格式简洁且结构明确。JSON 支持基本数据类型,如字符串、数字、布尔值、数组、对象和 null,使得它能够灵活地表示复杂的数据结构。由于 JSON 是纯文本格式,它能够与多种编程语言和平台兼容,并且被绝大多数开发环境和框架所支持。

JSON 常用于 Web 开发中,作为客户端与服务器之间的数据传输格式,便于实现动态网页和响应式设计。在 Web API 中,JSON 作为标准的数据返回格式,使得不同系统和应用程序能够高效地交换信息。此外,JSON 还被广泛用作应用程序的配置文件格式(如 package.jsontsconfig.json),因其易于编辑和解析。JSON 的广泛应用和标准化支持,使其成为现代开发中的重要工具,大大简化了数据交换和处理过程,提高了开发效率和系统的互操作性。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118630.html

(0)
上一篇 2025-11-11 19:10
下一篇 2025-06-11 08:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信