请求: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只是一个字符串,常用在两个节点之间网络传输数据

JSON格式与Java对象的转换

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。