无法使用未知键解组嵌套 json
Trouble unmarshalling nested json with unknown keys
我在将以下格式的 json 数据解组为结构时遇到问题。 json 的结构对我来说看起来有点混乱,因此为我解组它所做的所有愚蠢的事情道歉。
{
"message": {
"Server1.example.com": [
{
"application": "Apache",
"host": {
"name": "/^Server-[13456]/"
},
"owner": "User1",
"project": "Web",
"subowner": "User2"
}
],
"Server2.example.com": [
{
"application": "Mysql",
"host": {
"name": "/^Server[23456]/"
},
"owner": "User2",
"project": "DB",
"subowner": "User3"
}
]
},
"response_ms": 659,
"success": true
}
我正在尝试使用以下结构对其进行解组。
type ServerDetails struct {
Message struct{
Hostname struct{
Details struct{
Application string `json:"application"`
}`json:"-"`
}`json:"-"`
}`json:"message"`
}
字段Server[0-9].example.com
在生成时是未知的,会发生变化,有这个字段
{
"application": "Apache",
"host": {
"name": "/^Server-[13456]/"
},
就在没有密钥的服务器名称之后,这又让我感到困惑。我尝试了很多组合来理解如何解组,但我失败了。
将 json 字段解组为结构的有效方法是什么?
您 JSON 无效,第二个后有多余的逗号 ]
更正 JSON 后,您可以使用优秀的 https://mholt.github.io/json-to-go/ 构建以下 Go struct
type AutoGenerated struct {
Message struct {
Server1ExampleCom []struct {
Application string `json:"application"`
Host struct {
Name string `json:"name"`
} `json:"host"`
Owner string `json:"owner"`
Project string `json:"project"`
Subowner string `json:"subowner"`
} `json:"Server1.example.com"`
Server2ExampleCom []struct {
Application string `json:"application"`
Host struct {
Name string `json:"name"`
} `json:"host"`
Owner string `json:"owner"`
Project string `json:"project"`
Subowner string `json:"subowner"`
} `json:"Server2.example.com"`
} `json:"message"`
ResponseMs int `json:"response_ms"`
Success bool `json:"success"`
}
您可以包含一个映射[string]ServerStruct 来满足您的要求。
您的结构可能如下所示:
type YourStruct struct {
Success bool
ResponseMS int
Servers map[string]*ServerStruct
}
type ServerStruct struct {
Application string
Owner string
[...]
}
通过一些额外的 json 标签,您将能够解析您的 json。
我在将以下格式的 json 数据解组为结构时遇到问题。 json 的结构对我来说看起来有点混乱,因此为我解组它所做的所有愚蠢的事情道歉。
{
"message": {
"Server1.example.com": [
{
"application": "Apache",
"host": {
"name": "/^Server-[13456]/"
},
"owner": "User1",
"project": "Web",
"subowner": "User2"
}
],
"Server2.example.com": [
{
"application": "Mysql",
"host": {
"name": "/^Server[23456]/"
},
"owner": "User2",
"project": "DB",
"subowner": "User3"
}
]
},
"response_ms": 659,
"success": true
}
我正在尝试使用以下结构对其进行解组。
type ServerDetails struct {
Message struct{
Hostname struct{
Details struct{
Application string `json:"application"`
}`json:"-"`
}`json:"-"`
}`json:"message"`
}
字段Server[0-9].example.com
在生成时是未知的,会发生变化,有这个字段
{
"application": "Apache",
"host": {
"name": "/^Server-[13456]/"
},
就在没有密钥的服务器名称之后,这又让我感到困惑。我尝试了很多组合来理解如何解组,但我失败了。
将 json 字段解组为结构的有效方法是什么?
您 JSON 无效,第二个后有多余的逗号 ] 更正 JSON 后,您可以使用优秀的 https://mholt.github.io/json-to-go/ 构建以下 Go struct
type AutoGenerated struct {
Message struct {
Server1ExampleCom []struct {
Application string `json:"application"`
Host struct {
Name string `json:"name"`
} `json:"host"`
Owner string `json:"owner"`
Project string `json:"project"`
Subowner string `json:"subowner"`
} `json:"Server1.example.com"`
Server2ExampleCom []struct {
Application string `json:"application"`
Host struct {
Name string `json:"name"`
} `json:"host"`
Owner string `json:"owner"`
Project string `json:"project"`
Subowner string `json:"subowner"`
} `json:"Server2.example.com"`
} `json:"message"`
ResponseMs int `json:"response_ms"`
Success bool `json:"success"`
}
您可以包含一个映射[string]ServerStruct 来满足您的要求。
您的结构可能如下所示:
type YourStruct struct {
Success bool
ResponseMS int
Servers map[string]*ServerStruct
}
type ServerStruct struct {
Application string
Owner string
[...]
}
通过一些额外的 json 标签,您将能够解析您的 json。