gpt4 book ai didi

JSON 解码器给出意想不到的结果

转载 作者:IT王子 更新时间:2023-10-29 01:43:22 25 4
gpt4 key购买 nike

我有如下两个结构

type Job struct {
// Id int
ScheduleTime []CronTime
CallbackUrl string
JobDescriptor string
}

type CronTime struct {
second int
minute int
hour int
dayOfMonth int
month int
dayOfWeek int
}

正如您所见,Job 类型有一个 Crontime 类型的数组

我有一个发布请求,涉及以下功能

func ScheduleJob(w http.ResponseWriter, r *http.Request) {
log.Println("Schedule a Job")
addResponseHeaders(w)
decoder := json.NewDecoder(r.Body)
var job *models.Job
err := decoder.Decode(&job)
if err != nil {
http.Error(w, "Failed to get request Body", http.StatusBadRequest)
return
}
log.Println(job)
fmt.Fprintf(w, "Job Posted Successfully to %s", r.URL.Path)
}

我正在尝试将请求 Body 对象解码为 Job 对象

我的请求 JSON 对象看起来像

{
"ScheduleTime" :
[{
"second" : 0,
"minute" : 1,
"hour" : 10,
"dayOfMonth" : 1,
"month" : 1,
"dayOfWeek" : 2
}],
"CallbackUrl" : "SomeUrl",
"JobDescriptor" : "SendPush"
}

但 Json 解码器无法将请求主体解码为 ScheduleTime,这是一个 CronTime 数组。

我将 {[{0 0 0 0 0 0}] SomeUrl SendPush} 作为上述请求的日志输出。但我期待它 {[{0 1 10 1 1 2}] SomeUrl SendPush}

有人可以告诉我我做错了什么吗?

最佳答案

encoding/json 包只会将数据解码到结构的公共(public)字段中。所以有两种选择:

  1. CronTime 的字段重命名为大写以使其公开。
  2. CronTime 实现 json.Unmarshaller 接口(interface)并编写一个自定义的 UnmarshalJSON 实现来解码到私有(private)字段。

关于JSON 解码器给出意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18806325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com