为什么我写的go json转化不成功?

package main

import (
    "encoding/json"
    "fmt"
)

type cronMsg struct {
    cron string `json:"cron"`
    status int `json:"status"` //0 remove  1 valid
    springBeanId string `json:"spring_bean_id"`//在项目里面spring 的bean id
    url string  `json:"url"`//触发时调用的项目路径,支持多个用英文逗号隔开
    triggerModel int `json:"trigger_model"`//触发模式,1 代表随机调用一个(url里面随机选择一个)  2代表广播(url里面每一个都调用一次)
}

func main() {
    var cr cronMsg
    s :=`{"cron":"test","status":9,"spring_bean_id":"test222","url":"http://www.baidu.com","trigger_model":1}`
    buf := []byte(s)
    err:=json.Unmarshal(buf,&cr)
    if err!=nil {
        fmt.Println(err)
    }
    fmt.Println(cr)
}

https://www.modb.pro/db/211604
网上都是这样写的,为什么我的不行?
得出的cr结果是空的:
image.png
image.png
确实,这是一个坑

阅读 2.4k
4 个回答

截屏2022-05-25 下午1.24.29.png

这不是好好的吗

字段大写开头!

结构体成员变量包含可导出和不可导出的成员变量, 如果一个成员变量名称是首字母大写的,则该成员变量是可导出的;所以对于 "encoding/json" 包来说, 访问不到结构体 cronMsg 的任何成员变量,所以不能解析数据到结构体中;
同理你的结构体数据也不能使用 json.Marshal 转换为 json 数据;

json 包经常使用,所以要切记只有可导出的成员才可以被 json 包访问到,其他包同理

因为数据需要从当前包进入 encoding/json 包解析,所以你的 struct 必须是可导出状态。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题