为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中使用字符串拆分的自定义解组

在 Golang 中使用字符串拆分的自定义解组

Go
MMTTMM 2023-05-08 14:58:40
我有以下 JSON{"student_number":1234567, "name":"John Doe", "subjects":"Chemistry-Maths-History-Geography"}我想在一个结构中解组它,其中一个项目(主题)在 '-' 上被拆分成一个[]string.type Student struct {  StudentNumber int       `json:"student_number"`  Name          string    `json:"name"`  Subjects []string }我已经尝试了几种不同的方法来使用自定义解组来实现这一点strings.Split(),但到目前为止还没有成功。有没有办法在解组过程中实现这一点?还是我需要简单地按原样解组然后再进行转换?
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

最简单的方法是定义您自己的字符串切片类型并json.Unmarshaler在其上实现:

type strslice []string


func (ss *strslice) UnmarshalJSON(data []byte) error {

    var s string

    if err := json.Unmarshal(data, &s); err != nil {

        return err

    }

    *ss = strings.Split(s, "-")

    return nil

}

并在您的结构中使用它:


type Student struct {

    StudentNumber int      `json:"student_number"`

    Name          string   `json:"name"`

    Subjects      strslice `json:"subjects"`

}

然后它会起作用:


func main() {

    var s Student

    err := json.Unmarshal([]byte(src), &s)

    fmt.Println(s, err)

}


const src = `{"student_number":1234567, "name":"John Doe", "subjects":"Chemistry-Maths-History-Geography"}`


{1234567 John Doe [Chemistry Maths History Geography]} <nil>


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信