如何使用json.NewDecoder将JSON中的数组List解析到Go结构体?
问题分析与解决
你的问题出在结构体定义和JSON结构不匹配:JSON里的"list"是直接的字符串数组,但你在Config里把List定义成了一个包含Items切片的嵌套结构体,导致解析时无法映射数据。
修正后的结构体定义
把List字段直接定义为[]string,并保留json:"list"标签:
type Config struct { Data1 struct { Host string `json:"host"` Port string `json:"port"` } `json:"data1"` Data2 struct { Host string `json:"host"` Port string `json:"port"` } `json:"data2"` List []string `json:"list"` // 直接定义为字符串切片,匹配JSON结构 }
完整解析示例
补充文件打开和错误处理的完整代码:
package main import ( "encoding/json" "fmt" "os" ) type Config struct { Data1 struct { Host string `json:"host"` Port string `json:"port"` } `json:"data1"` Data2 struct { Host string `json:"host"` Port string `json:"port"` } `json:"data2"` List []string `json:"list"` } func main() { configFile, err := os.Open("config.json") if err != nil { fmt.Printf("打开文件失败: %v\n", err) return } defer configFile.Close() var config Config jsonParser := json.NewDecoder(configFile) if err := jsonParser.Decode(&config); err != nil { fmt.Printf("解析JSON失败: %v\n", err) return } // 现在可以直接访问List里的数据了 fmt.Println("List中的元素:") for idx, item := range config.List { fmt.Printf("%d: %s\n", idx+1, item) } }
运行结果
执行后会输出:
List中的元素: 1: item 1 2: item 2 3: item 3 4: item 4
内容的提问来源于stack exchange,提问作者nickehallgren
相关产品推荐
相关产品推荐

