无法使用未知键解组嵌套 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。