go语言读取json格式字符串问题,在线等!

package main 
import ( 
    "encoding/json" 
    "fmt" 
)

func main ( ) { 
   
    str:=`{"repositories":["heapster","mysql","zeppelin"]}`
    byteStr:=[]byte(str)
    
    type Repository struct{
        repositories []string
    }
    var repo Repository
    json. Unmarshal ( byteStr , &repo )
    fmt.Println(repo) 
}

最后输出为空的数组,请问哪里错了???
阅读 5.4k
4 个回答

你这个是struct的item都是私有的,只能当前package调用,要是传给json的话,就会读取不到
定义struct的时候大写首字母即可

func main(){
str:=`{"repositories":["heapster","mysql","zeppelin"]}`
byteStr:=[]byte(str)
type Repository struct{
    Repositories []string
}
var repo Repository
json. Unmarshal ( byteStr , &repo )
fmt.Println(repo) 
}

至于楼上说的struct加tag描述,那是为了字段名不一致使用的,默认情况下解析首字母大写会自动检测小写的,下面这种情况就需要定义tag表述

func main(){
str:=`{"test_repositories":["heapster","mysql","zeppelin"]}`
byteStr:=[]byte(str)
type Repository struct{
    Repositories []string `json:"test_repositories"`
}
var repo Repository
json. Unmarshal ( byteStr , &repo )
fmt.Println(repo) 
}
type Repository struct{
    Repositories []string `json:"repositories"`
}

可导出字段才可以被反射赋值

新手上路,请多包涵

在struct里加上json的tag就可以了

type Repository struct {
    Repositories []string `json:"repositories"`
}
......

str:=`{"repositories":["heapster","mysql","zeppelin"]}`
var repo Repository
json.Unmarshal([]byte(str),&repo)
fmt.Println(repo)
type Repository struct{
    Repositories []string
}

repositories 首字母大写就好了,首字母小写外部访问不到

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