go語(yǔ)言轉(zhuǎn)換json字符串為json數(shù)據(jù)的實(shí)現(xiàn)
在 Go 語(yǔ)言中,可以使用標(biāo)準(zhǔn)庫(kù) encoding/json
中的 json.Unmarshal
函數(shù)將 JSON 字符串轉(zhuǎn)換為 JSON 數(shù)據(jù)(通常是 Go 中的結(jié)構(gòu)體或 map 類型)。以下是一個(gè)簡(jiǎn)單的示例:
示例代碼
package main import ( "encoding/json" "fmt" "log" ) // 定義一個(gè)結(jié)構(gòu)體,用于映射 JSON 數(shù)據(jù) type Person struct { Name string `json:"name"` Age int `json:"age"` Hobbies []string `json:"hobbies"` } func main() { // JSON 字符串 jsonStr := `{ "name": "John", "age": 30, "hobbies": ["reading", "coding"] }` // 創(chuàng)建一個(gè)結(jié)構(gòu)體變量用于存儲(chǔ)解析后的數(shù)據(jù) var person Person // 將 JSON 字符串解析為結(jié)構(gòu)體 err := json.Unmarshal([]byte(jsonStr), &person) if err != nil { log.Fatalf("Error unmarshalling JSON: %v", err) } // 打印解析后的數(shù)據(jù) fmt.Printf("Name: %s\n", person.Name) fmt.Printf("Age: %d\n", person.Age) fmt.Printf("Hobbies: %v\n", person.Hobbies) }
代碼說(shuō)明
定義結(jié)構(gòu)體:
- 使用
struct
定義一個(gè)與 JSON 數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)的 Go 結(jié)構(gòu)體。 - 使用
json:"key"
標(biāo)簽來(lái)指定 JSON 中的鍵與結(jié)構(gòu)體字段的映射關(guān)系。
- 使用
json.Unmarshal
函數(shù):json.Unmarshal(data []byte, v interface{}) error
:data
是 JSON 字符串的字節(jié)切片。v
是目標(biāo)變量,用于存儲(chǔ)解析后的數(shù)據(jù)。- 如果解析成功,
v
中會(huì)包含 JSON 數(shù)據(jù);如果失敗,會(huì)返回錯(cuò)誤。
錯(cuò)誤處理:
- 如果 JSON 格式錯(cuò)誤或結(jié)構(gòu)體字段不匹配,
json.Unmarshal
會(huì)返回錯(cuò)誤。
- 如果 JSON 格式錯(cuò)誤或結(jié)構(gòu)體字段不匹配,
輸出結(jié)果
運(yùn)行上述代碼后,輸出如下:
Name: John
Age: 30
Hobbies: [reading coding]
使用 map 解析 JSON
如果 JSON 結(jié)構(gòu)不固定,也可以使用 map[string]interface{}
來(lái)解析 JSON 數(shù)據(jù),示例如下:
package main import ( "encoding/json" "fmt" "log" ) func main() { jsonStr := `{ "name": "John", "age": 30, "hobbies": ["reading", "coding"] }` // 使用 map 存儲(chǔ)解析后的數(shù)據(jù) var data map[string]interface{} // 解析 JSON err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { log.Fatalf("Error unmarshalling JSON: %v", err) } // 訪問(wèn) map 中的數(shù)據(jù) fmt.Printf("Name: %v\n", data["name"]) fmt.Printf("Age: %v\n", data["age"]) fmt.Printf("Hobbies: %v\n", data["hobbies"]) }
這種方式更加靈活,但需要通過(guò)類型斷言來(lái)訪問(wèn)具體字段的值。
到此這篇關(guān)于go語(yǔ)言轉(zhuǎn)換json字符串為json數(shù)據(jù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)go 字符串轉(zhuǎn)換為json數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go?Excelize?API源碼閱讀Close及NewSheet方法示例解析
這篇文章主要為大家介紹了Go?Excelize?API源碼閱讀Close及NewSheet方法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Golang中g(shù)orm無(wú)法將字段更新為空值
本文主要介紹了Golang中g(shù)orm無(wú)法將字段更新為空值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05go?install和go?get的區(qū)別實(shí)例詳解
go install是Golang用來(lái)編譯和安裝自定義package的工具,下面這篇文章主要給大家介紹了關(guān)于go?install和go?get區(qū)別的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01Go定時(shí)器的三種實(shí)現(xiàn)方式示例詳解
這篇文章主要為大家介紹了Go定時(shí)器的三種實(shí)現(xiàn)方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12解決老版本goland無(wú)法調(diào)試新版本go的問(wèn)題
這篇文章主要給大家介紹了如何解決老版本goland無(wú)法調(diào)試新版本go的問(wèn)題,文中通過(guò)代碼示例給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-11-11實(shí)現(xiàn)像php一樣方便的go ORM數(shù)據(jù)庫(kù)操作示例詳解
這篇文章主要為大家介紹了實(shí)現(xiàn)像php一樣方便的go ORM數(shù)據(jù)庫(kù)操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12