将 json 数组解析为 struct golang 列表

Parse json array into list of struct golang

我有一个如下所示的 json,我正在尝试为下面的 json 创建一个结构,它可以在我解组时为我存储数据。

{
  "clientMetrics": [
    {
      "clientId": 951231,
      "customerData": {
        "Process": [
          "ABC"
        ],
        "Mat": [
          "KKK"
        ]
      },
      "legCustomer": [
        8773
      ]
    },
    {
      "clientId": 1234,
      "legCustomer": [
        8789
      ]
    },
    {
      "clientId": 3435,
      "otherIds": [
        4,
        32,
        19
      ],
      "legCustomer": [
        10005
      ]
    },
    {
      "clientId": 9981,
      "catId": 8,
      "legCustomer": [
        13769
      ]
    },
    {
      "clientId": 12124,
      "otherIds": [
        33,
        29
      ],
      "legCustomer": [
        12815
      ]
    },
    {
      "clientId": 8712,
      "customerData": {
        "Process": [
          "College"
        ]
      },
      "legCustomer": [
        951
      ]
    },
    {
      "clientId": 23214,
      "legCustomer": [
        12724,
        12727
      ]
    },
    {
      "clientId": 119812,
      "catId": 8,
      "legCustomer": [
        14519
      ]
    },
    {
      "clientId": 22315,
      "otherIds": [
        32
      ],
      "legCustomer": [
        12725,
        13993
      ]
    },
    {
      "clientId": 765121,
      "catId": 8,
      "legCustomer": [
        14523
      ]
    }
  ]
}

clientMetrics 是一个 json 数组,其中包含每个 clientMetric 对象。每个 clientMetric 对象都可以有不同的字段。我尝试了类似下面的方法,但我对如何添加休息感到困惑,因为我来自 Java 背景并且我没有看到 golang 中有可用的设置。也对如何添加 customerData 对象感到困惑。

type ClientMetrics struct {
    ClientId    int64
    CatId       int64

  

}

unmarshall 以上 json 放入 golang 中的 ClientMetrics 结构列表的最佳方法是什么?

您可以在此处使用 json to gohttps://mholt.github.io/json-to-go/

但它会重复 CustomerData 结构两次,确保您应该删除其中一个。

我已经为您的场景创建了一个示例结构,如下所示:

type AutoGenerated struct {
        ClientMetrics []struct {
            ClientID     int `json:"clientId"`
            CustomerData struct {
                Process []string `json:"Process"`
                Mat     []string `json:"Mat"`
            } `json:"customerData,omitempty"`
            LegCustomer []int `json:"legCustomer"`
            OtherIds    []int `json:"otherIds,omitempty"`
            CatID       int   `json:"catId,omitempty"`
        } `json:"clientMetrics"`
    }

你可以在 go playground 中运行它:https://go.dev/play/p/R1M1HfzpEny

如果您使用的是 VS Code,则有一些扩展可以完成这项工作。 其中一个名为 Paste JSON as Code.

  1. 安装扩展程序
  2. 复制 JSON 并在您的剪贴板中 (ctrl+c)
  3. 按 Ctrl+Shift+P 和 select Paste JSON as code
  4. 键入结构名称并按回车键

如果这对您不起作用,您可以随时使用此站点 https://mholt.github.io/json-to-go/,但更好的做法是使用 unselecting Inline type definitions 后获得的结构选项。