首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Go json.Marshal会拒绝这些结构标签?json标签的正确语法是什么?

为什么Go json.Marshal会拒绝这些结构标签?json标签的正确语法是什么?
EN

Stack Overflow用户
提问于 2018-10-30 02:48:35
回答 1查看 10.9K关注 0票数 24

我正在尝试使用json.Marshal,但它拒绝接受我的结构标记。

我做错了什么?

下面是"marshal.go“的源代码

https://play.golang.org/p/eFe03_89Ly9

代码语言:javascript
运行
复制
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))
}

我从"go vet marshal.go“中得到这些错误消息

代码语言:javascript
运行
复制
./marshal.go:9: struct field tag `json: "name"` not compatible with reflect.StructTag.Get: bad syntax for struct tag value
./marshal.go:10: struct field tag `json: "age"` not compatible with reflect.StructTag.Get: bad syntax for struct tag value

当我运行这个程序时,我得到了这个输出。

代码语言:javascript
运行
复制
% ./marshal
JSON =  {"Name":"Alice","Age":29}

请注意,字段名称与Go结构相匹配,并忽略json标记。

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-10-30 03:00:35

我的天哪!我刚想通了。json:和字段名"name"之间不允许有空格。

"go vet“错误消息("bad syntax")非常无用。

下面的代码可以工作。你能看出不同之处吗?

代码语言:javascript
运行
复制
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))
}
票数 58
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53051979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档