我有一个结构
type MyStruct struct {
A string
B int
C string
D int
}
我想将它转换成这样的json对象:
{
"A": "Some string",
"B": 1234,
"otherStruct": {
"C": "Other string",
"D": 5678
}
}
我需要使用什么 json 标签才能正确转换它?
我尝试添加一些像这样的json标签:
type MyStruct struct {
A string `json:"A"`
B int `json:"B"`
C string `json:"otherStruct.C"`
D int `json:"otherStruct.D"`
}
但结果是这样的:
{
"A": "Some string",
"B": 1234,
"otherStruct.C": "Other string",
"otherStruct.D": 5678
}
如果您希望使用标准 Go JSON 包来输出此 JSON:
{
"A": "Some string",
"B": 1234,
"otherStruct": {
"C": "Other string",
"D": 5678
}
}
然后您需要重写 Go 结构以匹配 JSON 的结构。例如:
package main
import (
"encoding/json"
"fmt"
)
type (
OtherStruct struct {
C string
D int
}
MyStruct struct {
A string
B int
OtherStruct OtherStruct `json:"otherStruct"`
}
)
func main() {
myvar := MyStruct{
A: "Some string",
B: 1234,
OtherStruct: OtherStruct{
C: "Other string",
D: 5678,
},
}
jsontext, err := json.Marshal(myvar)
if err != nil {
panic(err)
}
fmt.Printf("%s\n", jsontext)
}
这将产生:
{
"A": "Some string",
"B": 1234,
"otherStruct": {
"C": "Other string",
"D": 5678
}
}
我不认为标准工具有任何方法可以使 JSON 的结构与变量的结构不同。