为什么Go json.Marshal拒绝这些结构标记?json标记的正确语法是什么?
我试图使用json.Marshal,但它拒绝接受我的结构标记 我做错了什么 这是“marshal.go”的源代码 我从“go vet marshal.go”收到这些错误消息 我在运行程序时得到这个输出为什么Go json.Marshal拒绝这些结构标记?json标记的正确语法是什么?,json,go,struct,tags,marshalling,Json,Go,Struct,Tags,Marshalling,我试图使用json.Marshal,但它拒绝接受我的结构标记 我做错了什么 这是“marshal.go”的源代码 我从“go vet marshal.go”收到这些错误消息 我在运行程序时得到这个输出 % ./marshal JSON = {"Name":"Alice","Age":29} 请注意,字段名与Go结构匹配,并忽略json标记 我错过了什么?天哪!我刚想出来。json:和字段名“name”之间不允许有空格 “go vet”错误消息(“错误语法”)毫无帮助 下面的代码可以工作。你
% ./marshal
JSON = {"Name":"Alice","Age":29}
请注意,字段名与Go结构匹配,并忽略json标记
我错过了什么?天哪!我刚想出来。
json:
和字段名“name”
之间不允许有空格
“go vet”错误消息(“错误语法”
)毫无帮助
下面的代码可以工作。你能看出区别吗
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
p := Person{Name: "Alice", Age: 29}
bytes, _ := json.Marshal(p)
fmt.Println("JSON = ", string(bytes))
}
尝试删除冒号后面的空格,即`json:`name`有效语法正是中所述的语法。它不能原谅空格等方面的差异。为什么会被否决呢?
go vet
是你的朋友。感谢你的回答,我有类似的地方:json:“containers,省略empty”`
你为所有人节省了无限的时间,从Go2年开始一直犯这个错误,谢谢兄弟,我为这个简单的问题挣扎了3天:)
% ./marshal
JSON = {"Name":"Alice","Age":29}
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
p := Person{Name: "Alice", Age: 29}
bytes, _ := json.Marshal(p)
fmt.Println("JSON = ", string(bytes))
}