Golang中對json的優(yōu)雅處理方式
背景
作為一種強數(shù)據(jù)類型的語言, Golang 對 json 的處理很麻煩。已知 json 的數(shù)據(jù)類型有:
- 字符串
- 數(shù)字
- 數(shù)組
- 字典
- 上述類型的嵌套
如果是弱數(shù)據(jù)類型的語言,例如 js , Python等,不需要考慮類型就直接可以使用。
原有方式
對 json 的處理分為編碼和解碼。 編碼是把已有的數(shù)據(jù)對象轉(zhuǎn)為 json 對象, 解碼反之。
Golang 對編碼比較好處理,直接把數(shù)據(jù)對象放到原生的 json.Marshal() 函數(shù)中即可返回字節(jié)數(shù)組。但對于解碼來說,就比較復雜了。
轉(zhuǎn)化為 map[string]interface
golang 中的 interface 相當于 Java 中的 Object, 什么都可以往里面放,但放進去方便就意味著取出來很麻煩。
例如想要從這個 json 字符串中取出 float64 類型的 數(shù)學成績,需要不斷的做類型轉(zhuǎn)換和map取值判斷,非常復雜。
預定義結(jié)構(gòu)體 struct
預先定義一個結(jié)構(gòu)體,讓內(nèi)置的解碼函數(shù)來做屬性映射, 比上面一種方法方便和常見很多,但是需要預先知道數(shù)據(jù)的詳細結(jié)構(gòu),不然沒法定義出來這個結(jié)構(gòu)體。
推薦: GJSON 處理
- 軟性返回,也就是數(shù)據(jù)類型如果對不上會返回對應的零值,而非 err 或者 panic , 所以不需要一定要預先知道原始類型。
- 提供多種數(shù)據(jù)類型和對應的 IsXXX() 判斷函數(shù),來輔助解決上面的零值問題
- 路徑解析方便, 通過像弱數(shù)據(jù)類型語言一樣 . 語法來做解析,極大的簡化了 json 的解碼問題。
總結(jié)
到此這篇關于Golang中對json的優(yōu)雅處理方式的文章就介紹到這了,更多相關Golang對json優(yōu)雅處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Golang環(huán)境變量設置和查看工具go env詳解
go env 是 Go 工具鏈中的一個命令,用于設置和查看當前 Golang 環(huán)境的相關信息,對于理解、編譯和運行 Golang 程序非常有用,本文就給大家簡單的介紹一下Golang環(huán)境變量設置和查看工具go env,需要的朋友可以參考下2023-07-07