亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

Golang如何使用encoding/json解析JSON

P粉602998670
發(fā)布: 2025-10-16 21:19:02
原創(chuàng)
759人瀏覽過
Go語言通過encoding/json庫解析JSON,可定義結(jié)構(gòu)體并使用json.Unmarshal將數(shù)據(jù)解碼到結(jié)構(gòu)中,支持struct、map[string]interface{}和切片接收,字段需導(dǎo)出并用json標(biāo)簽匹配鍵名,動態(tài)解析需注意類型斷言,數(shù)字默認(rèn)為float64;數(shù)組用[]T接收;大文件或HTTP響應(yīng)可用json.NewDecoder流式處理。

golang如何使用encoding/json解析json

Go語言通過標(biāo)準(zhǔn)庫encoding/json提供了對JSON數(shù)據(jù)的編碼和解碼支持。使用它解析JSON非常直接,關(guān)鍵在于合理定義結(jié)構(gòu)體或使用內(nèi)置類型接收數(shù)據(jù)。

定義結(jié)構(gòu)體解析JSON

最常見的方式是根據(jù)JSON結(jié)構(gòu)定義對應(yīng)的Go結(jié)構(gòu)體,然后使用json.Unmarshal將JSON字節(jié)流解析到結(jié)構(gòu)體中。

例如,有如下JSON數(shù)據(jù):

{"name": "Alice", "age": 30, "email": "alice@example.com"}

可以定義一個結(jié)構(gòu)體來匹配:

立即學(xué)習(xí)go語言免費學(xué)習(xí)筆記(深入)”;

type Person struct {
    Name  string `json:"name"`
    Age   int    `json:"age"`
    Email string `json:"email"`
}
登錄后復(fù)制

然后解析:

jsonData := []byte(`{"name": "Alice", "age": 30, "email": "alice@example.com"}`)
var p Person
err := json.Unmarshal(jsonData, &p)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("%+v\n", p)
登錄后復(fù)制

結(jié)構(gòu)體字段后的json:"xxx"標(biāo)簽用于指定對應(yīng)JSON中的鍵名。

處理動態(tài)或未知結(jié)構(gòu)的JSON

如果JSON結(jié)構(gòu)不確定,可以使用map[string]interface{}interface{}來接收。

比如解析一個不知道具體字段的JSON對象:

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online30
查看詳情 Find JSON Path Online
var data map[string]interface{}
err := json.Unmarshal(jsonData, &data)
if err != nil {
    log.Fatal(err)
}
for k, v := range data {
    fmt.Printf("%s: %v (%T)\n", k, v, v)
}
登錄后復(fù)制

注意:JSON中的數(shù)字默認(rèn)會被解析為float64,字符串為string,布爾值為bool,數(shù)組為[]interface{}。

解析JSON數(shù)組

當(dāng)JSON是一個數(shù)組時,可以用切片接收。

[{"name":"Alice","age":30},{"name":"Bob","age":25}]

定義結(jié)構(gòu)體并解析:

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

var people []Person
err := json.Unmarshal(jsonData, &people)
if err != nil {
    log.Fatal(err)
}
for _, p := range people {
    fmt.Printf("%s is %d years old\n", p.Name, p.Age)
}
登錄后復(fù)制

從文件或HTTP響應(yīng)中解析JSON

實際開發(fā)中,JSON常來自文件或網(wǎng)絡(luò)。可使用json.NewDecoder直接讀取json.Unmarshal0。

例如從HTTP響應(yīng)解析:

resp, err := http.Get("https://api.example.com/data.json")
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

var result map[string]interface{}
err = json.NewDecoder(resp.Body).Decode(&result)
if err != nil {
    log.Fatal(err)
}
fmt.Println(result)
登錄后復(fù)制

json.Unmarshal1適合處理大文件或流式數(shù)據(jù),而json.Unmarshal2更適合已加載到內(nèi)存的json.Unmarshal3。

基本上就這些。只要結(jié)構(gòu)清晰,無論是靜態(tài)結(jié)構(gòu)還是動態(tài)內(nèi)容,encoding/json都能有效處理。關(guān)鍵是根據(jù)場景選擇結(jié)構(gòu)體、map還是切片來接收數(shù)據(jù)。不復(fù)雜但容易忽略細(xì)節(jié),比如字段導(dǎo)出、標(biāo)簽匹配和類型斷言。

以上就是Golang如何使用encoding/json解析JSON的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級免費優(yōu)化軟件
最佳 Windows 性能的頂級免費優(yōu)化軟件

每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進(jìn)程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號