package main
import (
"encoding/json"
"fmt"
)
type InnerData struct {
M int64 `josn:"m"`
N int64 `json:"n"`
}
//JSONData is a json data example
type JSONData struct {
Hello string `json:"hello"`
Data InnerData `json:"data"`
}
func main() {
v := JSONData{Hello: "world", Data: InnerData{N: 100000, M: 123456}}
mashaled, err := json.Marshal(&v)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(mashaled))
}
请注意,InnerData中的字段M具有标签m,因此预期结果为:{“ hello”:“ world”,“ data”:{“ m”:123456,“ n”:100000}}。 当我有
{"hello":"world","data":{"M":123456,"n":100000}}
有人知道如何解决该问题,或者我在哪里错了?
答案 0 :(得分:1)
标签声明中的错误,其json
的拼写为josn
type InnerData struct {
M int64 `josn:"m"` // the spelling is not correct for json.
N int64 `json:"n"`
}
将字段M的标签更改为
type InnerData struct {
M int64 `json:"m"` // the spelling is not correct for json.
N int64 `json:"n"`
}
还有一件事是InnerData
不是嵌入式结构。在Golang规范中,嵌入式结构描述为:
使用类型声明但没有显式字段名称的字段称为 嵌入式领域。必须将嵌入字段指定为类型名称T 或作为指向非接口类型名称* T的指针,并且T本身可能不 是指针类型。非限定的类型名称充当字段名称。
//具有四个嵌入式字段的结构,分别是T1,* T2,P.T3和* P.T4类型
struct {
T1 // field name is T1
*T2 // field name is T2
P.T3 // field name is T3
*P.T4 // field name is T4
x, y int // field names are x and y
}
答案 1 :(得分:0)
您的代码中有错别字:
在您的InnerData
中,您放置了josn
而不是json
。
修正这些拼写错误,然后重试。