在 JSON 结构中解组数组
Unmarshalling arrays in JSON structure
计算器:
我一直在努力解组我认为不是特别复杂的东西
JSON GO 中的响应。 (我是相当新的)。示例如下:
{ "eventId": "tevtNKIsHrFQTyyMeYDMc5jgQ1459184873000",
"sessionId": "1016Q-vnpnlQwCiLiyH7e_cNg",
"targets":
[ { "id": "00u34k73otQGIAFUALPR", "displayName": "okta admin", "login": "oktaadmin@okta.com", "objectType": "User" } ] }
我尝试将其表示为一个结构数组,但它似乎永远无法连接。
我把我的代码放在了GO Lang playground上,如果有人能看一下我会很高兴
感激。
对于大 json 文档,我建议您使用此工具:https://mholt.github.io/json-to-go/
你会得到类似的东西:
type AutoGenerated struct {
EventID string `json:"eventId"`
SessionID string `json:"sessionId"`
RequestID string `json:"requestId"`
Published time.Time `json:"published"`
Action struct {
Message string `json:"message"`
Categories []string `json:"categories"`
ObjectType string `json:"objectType"`
RequestURI string `json:"requestUri"`
} `json:"action"`
Actors []struct {
ID string `json:"id"`
DisplayName string `json:"displayName"`
Login string `json:"login,omitempty"`
ObjectType string `json:"objectType"`
IPAddress string `json:"ipAddress,omitempty"`
} `json:"actors"`
Targets []struct {
ID string `json:"id"`
DisplayName string `json:"displayName"`
Login string `json:"login"`
ObjectType string `json:"objectType"`
} `json:"targets"`
}
完整示例:https://play.golang.org/p/Q8PwwtS_QZ
此外,您始终可以从 map[string]interface{}
而不是结构开始。
请更改结构如下。
type zMessage struct {
Message string `json:"message"`
}
type zTargets struct {
Idtarget string `json:"id"`
}
var val struct {
Targets [] zTargets `json:"targets"`
}
您将在编码时打印出目标 ID。
{[{00u34k73otQGIAFUALPR}]}
您需要修改您的结构并使用如下示例的代码:
package main
import (
"encoding/json"
"fmt"
)
type MyJSON struct {
EventID string `json:"eventID"`
SessionID string `json:"sessionID"`
Targets []MyTargets `json:"targets"`
}
type MyTargets struct {
Id string `json:"id"`
DisplayName string `json:"displayName"`
Login string `json:"login"`
ObjectType string `json:"objectType"`
}
func main() {
myJson := []byte(`{
"eventId": "tevtNKIsHrFQTyyMeYDMc5jgQ1459184873000",
"sessionId": "1016Q-vnpnlQwCiLiyH7e_cNg",
"targets": [
{
"id": "00u34k73otQGIAFUALPR",
"displayName": "okta admin",
"login":"oktaadmin@okta.com",
"objectType": "User"
}
]
}`)
myStruct := MyJSON{}
json.Unmarshal(myJson, &myStruct)
fmt.Printf(`
eventId: %s
sessionID: %s
targets.id: %s
targets.displayName: %s
targets.login: %s
targets.objectType: %s
`, myStruct.EventID, myStruct.SessionID,
myStruct.Targets[0].Id,
myStruct.Targets[0].DisplayName,
myStruct.Targets[0].Login,
myStruct.Targets[0].ObjectType)
}
输出:
eventId: tevtNKIsHrFQTyyMeYDMc5jgQ1459184873000
sessionID: 1016Q-vnpnlQwCiLiyH7e_cNg
targets.id: 00u34k73otQGIAFUALPR
targets.displayName: okta admin
targets.login: oktaadmin@okta.com
targets.objectType: User
中查看此代码
计算器:
我一直在努力解组我认为不是特别复杂的东西 JSON GO 中的响应。 (我是相当新的)。示例如下:
{ "eventId": "tevtNKIsHrFQTyyMeYDMc5jgQ1459184873000",
"sessionId": "1016Q-vnpnlQwCiLiyH7e_cNg",
"targets":
[ { "id": "00u34k73otQGIAFUALPR", "displayName": "okta admin", "login": "oktaadmin@okta.com", "objectType": "User" } ] }
我尝试将其表示为一个结构数组,但它似乎永远无法连接。
我把我的代码放在了GO Lang playground上,如果有人能看一下我会很高兴 感激。
对于大 json 文档,我建议您使用此工具:https://mholt.github.io/json-to-go/
你会得到类似的东西:
type AutoGenerated struct {
EventID string `json:"eventId"`
SessionID string `json:"sessionId"`
RequestID string `json:"requestId"`
Published time.Time `json:"published"`
Action struct {
Message string `json:"message"`
Categories []string `json:"categories"`
ObjectType string `json:"objectType"`
RequestURI string `json:"requestUri"`
} `json:"action"`
Actors []struct {
ID string `json:"id"`
DisplayName string `json:"displayName"`
Login string `json:"login,omitempty"`
ObjectType string `json:"objectType"`
IPAddress string `json:"ipAddress,omitempty"`
} `json:"actors"`
Targets []struct {
ID string `json:"id"`
DisplayName string `json:"displayName"`
Login string `json:"login"`
ObjectType string `json:"objectType"`
} `json:"targets"`
}
完整示例:https://play.golang.org/p/Q8PwwtS_QZ
此外,您始终可以从 map[string]interface{}
而不是结构开始。
请更改结构如下。
type zMessage struct {
Message string `json:"message"`
}
type zTargets struct {
Idtarget string `json:"id"`
}
var val struct {
Targets [] zTargets `json:"targets"`
}
您将在编码时打印出目标 ID。
{[{00u34k73otQGIAFUALPR}]}
您需要修改您的结构并使用如下示例的代码:
package main
import (
"encoding/json"
"fmt"
)
type MyJSON struct {
EventID string `json:"eventID"`
SessionID string `json:"sessionID"`
Targets []MyTargets `json:"targets"`
}
type MyTargets struct {
Id string `json:"id"`
DisplayName string `json:"displayName"`
Login string `json:"login"`
ObjectType string `json:"objectType"`
}
func main() {
myJson := []byte(`{
"eventId": "tevtNKIsHrFQTyyMeYDMc5jgQ1459184873000",
"sessionId": "1016Q-vnpnlQwCiLiyH7e_cNg",
"targets": [
{
"id": "00u34k73otQGIAFUALPR",
"displayName": "okta admin",
"login":"oktaadmin@okta.com",
"objectType": "User"
}
]
}`)
myStruct := MyJSON{}
json.Unmarshal(myJson, &myStruct)
fmt.Printf(`
eventId: %s
sessionID: %s
targets.id: %s
targets.displayName: %s
targets.login: %s
targets.objectType: %s
`, myStruct.EventID, myStruct.SessionID,
myStruct.Targets[0].Id,
myStruct.Targets[0].DisplayName,
myStruct.Targets[0].Login,
myStruct.Targets[0].ObjectType)
}
输出:
eventId: tevtNKIsHrFQTyyMeYDMc5jgQ1459184873000
sessionID: 1016Q-vnpnlQwCiLiyH7e_cNg
targets.id: 00u34k73otQGIAFUALPR
targets.displayName: okta admin
targets.login: oktaadmin@okta.com
targets.objectType: User
中查看此代码