json 结构字段中的大写字母

gcuhipw9  于 2022-12-15  发布在  其他
关注(0)|答案(3)|浏览(212)

我正在使用这个库访问CouchDB(具体来说是cloudant)“github.com/mikebell-org/go-couchdb“,我注意到了一个问题。
当我向数据库添加文件并传入一个结构体时,只有以大写字母开头的结构体字段会被添加。
例如

type Person struct {
    name string
    Age  int
}

func main() {
    db, _ := couchdb.Database(host, database, username, password)
    joe := Person{
        name: "mike",
        Age:  190,
    }
    m, _ := db.PostDocument(joe)
}

在本例中,只有“age”字段得到更新并插入到我的数据库中。
我在另一个案例中也注意到了这个问题--当我做这样的事情时:

type Sample struct {
    Name string
    age  int 
}

joe := Sample{
    Name: "xx",
    age:  23,
}

byt, _ := json.Marshal(joe)

post_data := strings.NewReader(string(byt))
fmt.Println(post_data)

在这种情况下,只会打印出名称:

output : &{{"Name":"xx"} 0 -1}

为什么会这样呢?如果我想有一个小写的字段,并且在数据库内部,这是可能的吗?

t9aqgxwy

t9aqgxwy1#

这是因为只导出以大写字母开头的字段,换句话说,在当前包之外可见(在本例中是在json包中)。
以下是与此相关的规范部分:http://golang.org/ref/spec#Exported_identifiers
尽管如此,您仍然可以使用所谓的“tags”来解组不以大写字母开头的json字段。对于json包,使用的语法如下:

type Sample struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

有关详细信息,请参阅文档。

pdtvr36n

pdtvr36n2#

json包仅字符串字段以大写字母开头。参见http://golang.org/pkg/encoding/json/
结构值编码为JSON对象。每个导出的结构字段都成为对象的成员,使用字段名作为对象键,除非该字段由于以下原因之一而被省略。
您需要像这样定义该结构:

type Sample struct{
    Name string `json:"name"`
    Age int `json:"age"`
}
ejk8hzay

ejk8hzay3#

json.Marshal方法struct-in field-i只接受以大写字母开头的字段
json包只访问struct类型的导出字段(以大写字母开始的字段),因此只有struct类型的导出字段才会出现在JSON输出中。

type Sample struct {
    Name string
    Age  int 
}

相关问题