You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:55:21