Golang中對(duì)json的優(yōu)雅處理方式
背景
作為一種強(qiáng)數(shù)據(jù)類(lèi)型的語(yǔ)言, Golang 對(duì) json 的處理很麻煩。已知 json 的數(shù)據(jù)類(lèi)型有:
- 字符串
- 數(shù)字
- 數(shù)組
- 字典
- 上述類(lèi)型的嵌套
如果是弱數(shù)據(jù)類(lèi)型的語(yǔ)言,例如 js , Python等,不需要考慮類(lèi)型就直接可以使用。
原有方式
對(duì) json 的處理分為編碼和解碼。 編碼是把已有的數(shù)據(jù)對(duì)象轉(zhuǎn)為 json 對(duì)象, 解碼反之。
Golang 對(duì)編碼比較好處理,直接把數(shù)據(jù)對(duì)象放到原生的 json.Marshal() 函數(shù)中即可返回字節(jié)數(shù)組。但對(duì)于解碼來(lái)說(shuō),就比較復(fù)雜了。
轉(zhuǎn)化為 map[string]interface
golang 中的 interface 相當(dāng)于 Java 中的 Object, 什么都可以往里面放,但放進(jìn)去方便就意味著取出來(lái)很麻煩。
例如想要從這個(gè) json 字符串中取出 float64 類(lèi)型的 數(shù)學(xué)成績(jī),需要不斷的做類(lèi)型轉(zhuǎn)換和map取值判斷,非常復(fù)雜。
預(yù)定義結(jié)構(gòu)體 struct
預(yù)先定義一個(gè)結(jié)構(gòu)體,讓內(nèi)置的解碼函數(shù)來(lái)做屬性映射, 比上面一種方法方便和常見(jiàn)很多,但是需要預(yù)先知道數(shù)據(jù)的詳細(xì)結(jié)構(gòu),不然沒(méi)法定義出來(lái)這個(gè)結(jié)構(gòu)體。
推薦: GJSON 處理
- 軟性返回,也就是數(shù)據(jù)類(lèi)型如果對(duì)不上會(huì)返回對(duì)應(yīng)的零值,而非 err 或者 panic , 所以不需要一定要預(yù)先知道原始類(lèi)型。
- 提供多種數(shù)據(jù)類(lèi)型和對(duì)應(yīng)的 IsXXX() 判斷函數(shù),來(lái)輔助解決上面的零值問(wèn)題
- 路徑解析方便, 通過(guò)像弱數(shù)據(jù)類(lèi)型語(yǔ)言一樣 . 語(yǔ)法來(lái)做解析,極大的簡(jiǎn)化了 json 的解碼問(wèn)題。
總結(jié)
到此這篇關(guān)于Golang中對(duì)json的優(yōu)雅處理方式的文章就介紹到這了,更多相關(guān)Golang對(duì)json優(yōu)雅處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang常見(jiàn)接口限流算法的實(shí)現(xiàn)
本文主要介紹了golang常見(jiàn)接口限流算法的實(shí)現(xiàn),包含固定窗口、滑動(dòng)窗口、漏桶和令牌桶,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03GoFrame錯(cuò)誤處理常用方法及錯(cuò)誤碼使用示例
這篇文章主要為大家介紹了GoFrame錯(cuò)誤處理常用方法及錯(cuò)誤碼使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06golang優(yōu)化目錄遍歷的實(shí)現(xiàn)方法
對(duì)于go1.16的新變化,大家印象最深的可能是io包的大規(guī)模重構(gòu),但這個(gè)重構(gòu)實(shí)際上還引進(jìn)了一個(gè)優(yōu)化,這篇文章要說(shuō)的就是這個(gè)優(yōu)化,所以本將給大家介紹golang是如何優(yōu)化目錄遍歷的,需要的朋友可以參考下2024-08-08Golang環(huán)境變量設(shè)置和查看工具go env詳解
go env 是 Go 工具鏈中的一個(gè)命令,用于設(shè)置和查看當(dāng)前 Golang 環(huán)境的相關(guān)信息,對(duì)于理解、編譯和運(yùn)行 Golang 程序非常有用,本文就給大家簡(jiǎn)單的介紹一下Golang環(huán)境變量設(shè)置和查看工具go env,需要的朋友可以參考下2023-07-07詳解如何使用beego orm在postgres中存儲(chǔ)圖片
這篇文章主要為大家介紹了如何使用beego orm在postgres中存儲(chǔ)圖片詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04golang中實(shí)現(xiàn)graphql請(qǐng)求的方法
這篇文章主要介紹了如何在golang中實(shí)現(xiàn)graphql請(qǐng)求,在本文中,我們介紹了如何使用gqlgen來(lái)構(gòu)建GraphQL服務(wù),需要的朋友可以參考下2023-04-04