03-前后端数据传输格式-下
请求:JSON转换为Java对象
响应:Java对象转换为JSON
JSON
想完成跨内存(浏览器/服务器、服务器/服务器)的数据传输、对象转换,必须经过网络传输,而且需要一个传递信息的载体,还需要序列化和反序列化的操作
- 传递信息的载体
JSON简单来说就是特定格式的字符串,JSON的载体就是字符串。JS对象和Java对象都是对象,存活于内存中(浏览器/服务器),JSON只是字符串,只承担网络传输的角色:
在前端中本身没有JSON对象,在下面的内容里:
let person = {"name":"zhangsan","sex":"男","age":24}
这只是一个JS的字面量对象,只是JS对象的一个子集而已。因为满足JSON的格式被称为 JSON对象,但是这样是不太严谨的。
- 序列化和反序列化
在学习[[011-IO|IO流]]时学习过序列化流和反序列化流,通过这两种流就可以实现对象的序列化和反序列化
[!NOTE] Title
序列化:将对象状态转化为可保持或可传输的过程,一般的格式是与平台无关的二进制流,也可以将这种二进制流持久保存在磁盘上,或者通过网络将这种二进制流传输到另一个网络节点,在另一节点进行反序列化为对象。典型应用就是分布式系统
序列化的另一种用途则是作为不同工程间的远程通讯。对于一般的单体架构来说,不需要进行对象序列化,但是一旦涉及到远程调用或者分布式系统,一个系统调用另一个系统的服务时,POJO对象必须[[011-IO#序列化版本号|支持序列化]]。这样在一个系统中序列化后,经过网络传输到达另一个系统时,可以通过反序列化重构对象,在这个系统中也可以使用这个对象。
实际上,整个请求响应的过程都是序列化和反序列化的过程:
请求:
- 浏览器将JS对象序列化为JSON字符串
- 网络传输JSON字符串
- 服务器获取到JSON字符串后反序列化为Java对象
响应:
- 服务器端将Java对象序列化为JSON
- 网络传递JSON字符串
- 浏览器获取到JSON字符串后反序列化为JSON对象
不仅是浏览器-服务器,服务器-服务器之间也需要JSON作为数据传输的载体
JSON的格式
{
"name" : "zhangsan",
"age" : 15,
"hobby" : ["smoke","drink"]
}
JSON规定的格式:
-
"key" : "value"
表示对象的字段,如果value是字符串类型需要加双引号,数值类型可以不加 -
{}
表示 对象、Map、其他符合key-value格式的结构 -
[]
表示 一组对象、一组字符串、一组数值
各个语言都会遵守这个规定,转化为自身的对象结构,比如:
-
{}
代表Java对象/Map,[]
对应Java的数组、List、Set等单列集合 -
{}
代表Python对象/字典,[]
对应Python的元组或list -
{}
代表PHP的对象,[]
对应PHP的Array
JS对象和Java对象属于同一层次,而JSON只是一个字符串,常用在两个节点之间网络传输数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix