将 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 go
:https://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
.
- 安装扩展程序
- 复制 JSON 并在您的剪贴板中 (ctrl+c)
- 按 Ctrl+Shift+P 和 select
Paste JSON as code
- 键入结构名称并按回车键
如果这对您不起作用,您可以随时使用此站点 https://mholt.github.io/json-to-go/,但更好的做法是使用 unselecting Inline type definitions
后获得的结构选项。
我有一个如下所示的 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 go
:https://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
.
- 安装扩展程序
- 复制 JSON 并在您的剪贴板中 (ctrl+c)
- 按 Ctrl+Shift+P 和 select
Paste JSON as code
- 键入结构名称并按回车键
如果这对您不起作用,您可以随时使用此站点 https://mholt.github.io/json-to-go/,但更好的做法是使用 unselecting Inline type definitions
后获得的结构选项。