国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 系統(tǒng)教程 操作系統(tǒng) json數據的序列化和反序列化

json數據的序列化和反序列化

Jan 09, 2024 am 11:30 AM
linux 紅帽

導讀 json的全稱是Javascript object notation, 中文全稱:js對象表示法。在序列化和反序列化的協議中,有:json、xml、yaml、protocol buffer等。其中json是前后端API契約數據的主要傳輸形式。json支持數值、布爾值、數組和對象四種數據類型。通過這四種數據類型,可以構建復雜的數據模型。

在Go語言中,我們可以使用json標準庫來實現數據的序列化和反序列化。這個庫提供了方便的方法來序列化和反序列化map、結構體、數組、切片和內置的基本數據類型。通過使用json標準庫,我們可以輕松地將數據轉換為json格式,并在需要時將其解析回原始數據類型。這為我們處理數據提供了很大的便利性。

在這里,我將舉三個例子來說明json的使用方法。對于初學者來說,可能經常只使用一種結構體對象來接收和發(fā)送數據。下面我們就來看看具體的例子。 1. 使用結構體對象接收數據: ``` type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { data := `{"name": "Alice", "age": 25}` var p Person err := json.Unmarshal([]byte(data), &p) if err != nil { fmt.Println("解析json失?。?, err) return

json數據的序列化和反序列化

結構體

type Person struct {<br> Name string `json:"name"`<br> Age int `json:"age"`<br> }
<br> func main() {<br> var (<br> newPer Person<br> bts []byte<br> )<br> per:=Person{<br> Name: "Lily",<br> Age: 29,<br> }<br> // 序列化<br> if bts, err = json.Marshal(per); err !=nil{<br> log.Fatal(err.Error())<br> return<br> }
<br> if err = json.Unmarshal(bts, &newPer); err !=nil{<br> log.Fatal(err.Error())<br> return<br> }<br> fmt.Println(newPer)<br> }

map

func main() {<br> var (<br> smap = map[string]int{<br> "Age": 28,<br> "Sex": 1,<br> "Floor": 12,<br> }<br> newSmap = make(map[string]int)<br> bts []byte<br> )<br> if bts, err = json.Marshal(smap); err !=nil {<br> log.Fatal(err.Error())<br> return<br> }<br> if err = json.Umarshal(bts, &newSmap); err !=nil {<br> log.Fatal(err.Error())<br> return<br> }<br> fmt.Println(newSmap)<br> }

數組或者slice動態(tài)數組

func main() {<br> var (<br> ages []int = []int{23, 20, 28, 25, 30}<br> bts []byte<br> err error<br> newAges = make([]int, len(ages))<br> )<br> if bts, err = json.Marshal(ages); err != nil {<br> fmt.Println(err.Error())<br> return<br> }<br> if err = json.Unmarshal(bts, &newAges); err != nil {<br> fmt.Println(err.Error())<br> return<br> }<br> fmt.Println("new ages: ", newAges)<br> return<br> }
初學者對結構體的json序列化和反序列化比較清楚,對后兩種可能很少用,也不會用。

  • 對于數組類型數據,但是有些業(yè)務場景前端會使用。
  • 對于map類型,一般會在Go語言的服務端調用第三方REST接口時,服務端只想要指定的返回碼,判斷是否調用成功時。程序猿不想寫整體的struct結構體定義,也可能是比較懶,然后用了一個map[string]interface{}去接收返回數據。這時候通過json標準庫中的Unmarshal反序列化后,然后通過map["err_code"].(int)獲取返回碼,然后再做其他后續(xù)處理邏輯。

這里還要說明一個結構體時,有時候我會用到的特性,結構體的json支持的標簽值特性omitempty,例如:
type Person struct {<br> Name string `json:"name,omitempty"`<br> Age int `json:"age"`<br> }<br> 它表示,當函數omitempty的標簽值時,它所對應的結構體的數據元素值如果是零值,則它不會輸出。那就是說如果服務端返回的結構體數據中的某個元素為空時,不返回給前端這個元素,就可以使用omitempty的json標簽值屬性。

在這里給大家提供一個滴滴公司的一位高級工程師taowen寫的json解析庫,世界上最快的。github地址:jsoniter。

文章轉載自 開源中國社區(qū) [http://www.oschina.net]

以上是json數據的序列化和反序列化的詳細內容。更多信息請關注PHP中文網其他相關文章!

本站聲明
本文內容由網友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現有涉嫌抄襲侵權的內容,請聯系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
Linux和Windows的所有權成本有何不同? Linux和Windows的所有權成本有何不同? Jun 09, 2025 am 12:17 AM

Linux的擁有成本通常低于Windows。1)Linux無需許可證費用,節(jié)省大量成本,而Windows需購買許可證。2)Linux對硬件要求低,可延長設備使用壽命。3)Linux社區(qū)提供免費支持,降低維護成本。4)Linux安全性高,減少生產力損失。5)Linux學習曲線較陡,但Windows更易上手。選擇應基于具體需求和預算。

如何與Windows一起安裝Linux(雙啟動)? 如何與Windows一起安裝Linux(雙啟動)? Jun 18, 2025 am 12:19 AM

安裝Linux和Windows雙系統(tǒng)的關鍵是分區(qū)和啟動設置。1.準備工作包括備份數據并壓縮現有分區(qū)騰出空間;2.使用Ventoy或Rufus制作Linux啟動U盤,推薦Ubuntu;3.安裝時選擇“與其他系統(tǒng)并存”或手動分區(qū)(/至少20GB,/home剩余空間,swap可選);4.勾選安裝第三方驅動以避免硬件問題;5.安裝后若未進入Grub引導菜單,可用boot-repair修復引導或調整BIOS啟動順序。只要步驟清晰、操作得當,整個過程并不復雜。

如何啟用EPEL(企業(yè)Linux的額外軟件包)存儲庫? 如何啟用EPEL(企業(yè)Linux的額外軟件包)存儲庫? Jun 17, 2025 am 09:15 AM

啟用EPEL倉庫的關鍵在于根據系統(tǒng)版本選擇正確的安裝方式。首先,確認系統(tǒng)類型和版本,使用命令cat/etc/os-release獲取信息;其次,在CentOS/RockyLinux上通過dnfinstallepel-release啟用EPEL,8和9版本命令相同;第三,在RHEL上需手動下載對應版本的.repo文件并安裝;第四,遇到問題時可重新導入GPG密鑰,注意舊版本可能不被支持,也可考慮啟用epel-next獲取測試包。完成上述步驟后,使用dnfrepolist驗證是否成功添加EPEL倉庫。

如何為初學者選擇Linux發(fā)行版? 如何為初學者選擇Linux發(fā)行版? Jun 19, 2025 am 12:09 AM

新手選擇Linux發(fā)行版應先明確使用需求。1.日常使用選Ubuntu或LinuxMint;編程開發(fā)適合Manjaro或Fedora;老舊設備用Lubuntu等輕量系統(tǒng);學習底層原理推薦CentOSStream或Debian。2.穩(wěn)定性優(yōu)先考慮UbuntuLTS或Debian;追求新功能可選Arch或Manjaro。3.社區(qū)支持方面,Ubuntu和LinuxMint資源豐富,Arch文檔偏技術向。4.安裝難度上,Ubuntu、LinuxMint較簡單,Arch適合有基礎者。建議先試用再決定。

如何向Linux添加新磁盤 如何向Linux添加新磁盤 Jun 27, 2025 am 12:15 AM

添加新硬盤到Linux系統(tǒng)步驟如下:1.確認硬盤被識別,使用lsblk或fdisk-l檢查;2.用fdisk或parted分區(qū),如fdisk/dev/sdb創(chuàng)建分區(qū)并保存;3.格式化分區(qū)為文件系統(tǒng),如mkfs.ext4/dev/sdb1;4.臨時掛載使用mount命令,如mount/dev/sdb1/mnt/data;5.修改/etc/fstab實現開機自動掛載,需先測試掛載確保無誤。操作前務必確認數據安全,避免硬件連接問題。

修復無法在Windows Google Chrome上傳文件 修復無法在Windows Google Chrome上傳文件 Jul 08, 2025 pm 02:33 PM

在GoogleChrome中上傳文件時遇到問題?這可能很煩人,對吧?無論您是將文檔附加到電子郵件、在社交媒體上共享圖像,還是提交工作或學校的重要文件,流暢的文件上傳過程都是至關重要的。因此,如果您的文件上傳在WindowsPC上的Chrome中持續(xù)失敗,可能會令人沮喪。如果您還沒有準備好放棄您最喜歡的瀏覽器,這里有一些提示修復無法在WindowsGoogleChrome上傳文件1.從通用修復開始在我們了解任何高級故障排除技巧之前,最好先嘗試下面提到的一些基本解決方案。排除互聯網連接問題:互聯網連

Linux中的系統(tǒng)日志在哪里? Linux中的系統(tǒng)日志在哪里? Jun 24, 2025 am 12:15 AM

Linux系統(tǒng)中的日志通常存儲在/var/log目錄中,該目錄包含多種關鍵日志文件,如syslog或messages(記錄系統(tǒng)日志)、auth.log(記錄認證事件)、kern.log(記錄內核消息)、dpkg.log或yum.log(記錄軟件包操作)、boot.log(記錄啟動信息);可通過cat、tail-f或journalctl等命令查看日志內容;應用日志也常位于/var/log下的子目錄,如Apache的apache2或httpd目錄、MySQL的日志文件等;同時需注意日志權限通常需要s

什么是sudo命令,我什么時候應該使用它? 什么是sudo命令,我什么時候應該使用它? Jul 02, 2025 am 12:20 AM

sudo代表“substituteuserdo”或“superuserdo”,允許用戶以其他用戶(通常是root)的權限運行命令。其核心用途包括:1.執(zhí)行系統(tǒng)級操作如安裝軟件或編輯系統(tǒng)文件;2.訪問受保護目錄或日志;3.管理服務如重啟nginx;4.修改全局設置如/etc/hosts。使用時系統(tǒng)會檢查/etc/sudoers配置并驗證用戶密碼,提供臨時權限而非持續(xù)以root身份登錄,確保安全性。最佳實踐包括:僅必要時使用、避免盲目執(zhí)行網絡命令、用visudo編輯sudoers文件、連續(xù)操作可考慮

See all articles