我有一个结构体,我需要编组来使用 web 服务,但是在我的测试中,我的 Marshal 函数只编码了一个字段:type DataRows []struct { mData interface{}}type DataColumns []struct { mColumnName string mColumnType int mColumnPrecision int mColumnScale int}type DataTables []struct { mDataColumns DataColumns mDataRows DataRows mIndex int}type CFFDataSet struct { mDataTables DataTables mUser string DBServer int}func main() { ds := CFFDataSet{ mDataTables: DataTables{{ mDataColumns: DataColumns{{ mColumnName: "Test", mColumnType: 1, mColumnPrecision: 1, mColumnScale: 1, }}, mDataRows: DataRows{{ mData: "Test", }}, mIndex: 0, }}, mUser: "Teste", DBServer: 2, } marchaled, _ := json.Marshal(ds) fmt.Println(string(marchaled))}回来了$ go run getrest.go{"DBServer":2}有人可以给我一个提示,为什么这不起作用?
1 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
所有其他字段都未导出(如其他语言中的私有),解组器无法访问它们。这是由字段名称中的第一个字母的大小写指定的,需要大写。
作为参考,这里有一个示例,在您的结构中使用与 json 的字段名称不同的字段名称;
var jsonBlob = []byte(`[
{"Name": "Platypus", "Purchase": "Monotremata"},
{"Name": "Quoll", "Purchase": "Dasyuromorphia"}
]`)
type Animal struct {
Name string
Order string `json:"Purchase"`
}
var animals []Animal
err := json.Unmarshal(jsonBlob, &animals)
if err != nil {
fmt.Println("error:", err)
}
fmt.Printf("%+v", animals)
https://play.golang.org/p/iJqaXQY7Ch
- 1 回答
- 0 关注
- 166 浏览
添加回答
举报
0/150
提交
取消