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

时间:2018-10-29 18:48:35

标签: json go struct tags marshalling

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

我在做什么错了?

这是“ marshal.go”的源代码

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

extract-text-webpack-plugin

我从“ go vet marshal.go”获得这些错误消息

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))
}

运行程序时得到此输出。

./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

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

我想念什么?

1 个答案:

答案 0 :(得分:4)

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

“ go vet”错误消息("bad syntax")毫无帮助。

以下代码有效。你能看到区别吗?

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))
}