go語言轉(zhuǎn)換json字符串為json數(shù)據(jù)的實(shí)現(xiàn)
在 Go 語言中,可以使用標(biāo)準(zhǔn)庫 encoding/json 中的 json.Unmarshal 函數(shù)將 JSON 字符串轉(zhuǎn)換為 JSON 數(shù)據(jù)(通常是 Go 中的結(jié)構(gòu)體或 map 類型)。以下是一個(gè)簡單的示例:
示例代碼
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)
}
代碼說明
定義結(jié)構(gòu)體:
- 使用
struct定義一個(gè)與 JSON 數(shù)據(jù)結(jié)構(gòu)對應(yīng)的 Go 結(jié)構(gòu)體。 - 使用
json:"key"標(biāo)簽來指定 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{} 來解析 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)
}
// 訪問 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ān)于go語言轉(zhuǎn)換json字符串為json數(shù)據(jù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)go 字符串轉(zhuǎn)換為json數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go?Excelize?API源碼閱讀Close及NewSheet方法示例解析
這篇文章主要為大家介紹了Go?Excelize?API源碼閱讀Close及NewSheet方法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
go?install和go?get的區(qū)別實(shí)例詳解
go install是Golang用來編譯和安裝自定義package的工具,下面這篇文章主要給大家介紹了關(guān)于go?install和go?get區(qū)別的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
Go定時(shí)器的三種實(shí)現(xiàn)方式示例詳解
這篇文章主要為大家介紹了Go定時(shí)器的三種實(shí)現(xiàn)方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
實(shí)現(xiàn)像php一樣方便的go ORM數(shù)據(jù)庫操作示例詳解
這篇文章主要為大家介紹了實(shí)現(xiàn)像php一樣方便的go ORM數(shù)據(jù)庫操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12

