如何捕获JSON响应中的匿名密钥并存储在结构中



我是Go新手,一直在解组json数据。将JSON解组为作为响应返回的响应JSON的结构时遇到问题。

两个内部变量的键是匿名的。因此,对它们进行解组不会得到任何数据。

Json响应如下

{
"data": [
{
"Name": "Dummy Value",
"configEvents": {
"5f94f412-532a-41a8-821e-6326dd72556b": {
"eventId": "dummy",
"start": "dummy",
"end": "dummy",
"details": {
"providerCallSign": "dummy",
"callSign": "dummy"
}
}
},
"policyEvents": {
"930195be-f409-421c-abe2-a39d2450d669": {
"details": {
"daiMobileFlag": false
}
}
}
}
]
}

我的结构如下

type Response struct {
Data []struct {
Name         string `json:"Name"`
ConfigEvents struct {
FiveF94F412532A41A8821E6326Dd72556B struct {
EventID string `json:"eventId"`
Start   string `json:"start"`
End     string `json:"end"`
Details struct {
ProviderCallSign string `json:"providerCallSign"`
CallSign         string `json:"callSign"`
} `json:"details"`
} `json:"5f94f412-532a-41a8-821e-6326dd72556b"`
} `json:"configEvents"`
PolicyEvents struct {
Nine30195BeF409421CAbe2A39D2450D669 struct {
Details struct {
DaiMobileFlag bool `json:"daiMobileFlag"`
} `json:"details"`
} `json:"930195be-f409-421c-abe2-a39d2450d669"`
} `json:"policyEvents"`
} `json:"data"`
}

由于密钥在响应中是动态的,因此解组不会捕获特定对象。有没有办法在goLang中处理这种情况。

我将json修复为类似的有效内容,如

{
"data": [
{
"Name": "Dummy Value",
"configEvents": {
"5f94f412-532a-41a8-821e-6326dd72556b": {
"eventId": "dummy",
"start": "dummy",
"end": "dummy",
"details": {
"providerCallSign": "dummy",
"callSign": "dummy"
}
}
},
"policyEvents": {
"930195be-f409-421c-abe2-a39d2450d669": {
"details": {
"daiMobileFlag": false
}
}
}
}
]
}

然后这个代码工作以摄取它

package main
import (
"encoding/json"
"fmt"
"io/ioutil"
)
type insideConfigEvents struct {
EventID string `json:"eventId"`
Start   string `json:"start"`
End     string `json:"end"`
Details struct {
ProviderCallSign string `json:"providerCallSign"`
CallSign         string `json:"callSign"`
} `json:"details"`
}
type insidePolicyEvents struct {
Details struct {
DaiMobileFlag bool `json:"daiMobileFlag"`
} `json:"details"`
}
type Input struct {
Data []struct {
Name         string                        `json:"Name"`
ConfigEvents map[string]insideConfigEvents `json:"configEvents"`
PolicyEvents map[string]insidePolicyEvents `json:"policyEvents"`
} `json:"data"`
}
func main() {
var dat Input
b, err := ioutil.ReadFile("inv.json") // just pass the file name
if err != nil {
fmt.Print(err)
}
if err := json.Unmarshal(b, &dat); err != nil {
panic(err)
}
fmt.Println(dat.Data[0].ConfigEvents)
}

最新更新