03-前後端資料傳輸格式-下

EUNEIR發表於2024-03-13

image.png | 400

請求:JSON轉換為Java物件

響應:Java物件轉換為JSON

JSON

想完成跨記憶體(瀏覽器/伺服器、伺服器/伺服器)的資料傳輸、物件轉換,必須經過網路傳輸,而且需要一個傳遞資訊的載體,還需要序列化和反序列化的操作

  • 傳遞資訊的載體

JSON簡單來說就是特定格式的字串JSON的載體就是字串。JS物件和Java物件都是物件,存活於記憶體中(瀏覽器/伺服器),JSON只是字串,只承擔網路傳輸的角色:

image.png | 450

在前端中本身沒有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作為資料傳輸的載體

image.png | 700

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物件的轉換

相關文章