我正在尝试解组一些 JSON 数据。我认为问题在于这两个数组具有不同的字段,因此与我的结构不匹配。本质上,我只需要数组中第一个项目的数据。有办法解决这个问题吗?这是我所拥有的,但是它没有抛出任何错误,但似乎没有返回任何内容。
package main
import (
"encoding/json"
"fmt"
"time"
)
var jsondata = `{
"Secrets": [
{
"name": "default",
"versionInfo": "2025-02-10T20:11:05Z/1",
"lastUpdated": "2025-02-10T20:11:05.512Z",
"secret": {
"@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret",
"name": "default",
"tlsCertificate": {
"certificateChain": {
"inlineBytes": "RRVkp2YjNSRApRVEV1WTN=="
},
"privateKey": {
"inlineBytes": "W3JlZFRDSGVkXQ=="
}
}
}
},
{
"name": "default2",
"versionInfo": "2025-02-10T20:11:05Z/3",
"lastUpdated": "2025-02-10T20:11:05.527Z",
"secret": {
"@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret",
"name": "ROOTCA",
"validationContext": {
"trustedCa": {
"inlineBytes": "LS0tLS1CRUdJTiBDRVJUSUZJ="
}
}
}
}
]
}`
type model struct {
Name string `json:"name"`
VersionInfo time.Time `json:"versionInfo"`
LastUpdated time.Time `json:"lastUpdated"`
Secret struct {
Type string `json:"@type"`
Name string `json:"name"`
TLSCertificate struct {
CertificateChain struct {
InlineBytes string `json:"inlineBytes"`
} `json:"certificateChain"`
PrivateKey struct {
InlineBytes string `json:"inlineBytes"`
} `json:"privateKey"`
} `json:"tlsCertificate"`
} `json:"secret"`
}
func main() {
input := []byte(jsondata)
//Source := (*json.RawMessage)(&data2)
var Info model
// Notice the dereferencing asterisk *
err := json.Unmarshal(input, &Info)
if err != nil {
//fmt.Printf(err.Error())
panic(err)
}
fmt.Printf("%s", Info.Name)
}
您输入的 JSON 是一个具有 JSON 数组属性的对象
Secrets
。您必须使用 Go 中的切片来建模它,如下所示:并且在 JSON 中
versionInfo
不是有效时间(请注意尾随的/1
和/3
,使用string
和您可以稍后处理它:现在解析您的输入:
这将输出(在Go Playground上尝试):