user3888307 user3888307 - 12 days ago 12
JSON Question

Unmarshalling arrays in JSON structure

Stackoverflow:

I've been struggling to unmarshal what I wouldn't consider an especially complex
JSON response in GO. (which I'm fairly new to). Example below:

{ "eventId": "tevtNKIsHrFQTyyMeYDMc5jgQ1459184873000",
"sessionId": "1016Q-vnpnlQwCiLiyH7e_cNg",
"targets":
[ { "id": "00u34k73otQGIAFUALPR", "displayName": "okta admin", "login": "oktaadmin@okta.com", "objectType": "User" } ] }


I tried representing this as an array of structs, but it never seems to connect.

I put my code on the GO Lang playground, if anyone can take a look I'd be very
appreciative.

https://play.golang.org/p/TVYeYe7e_I

Answer

For big json documents I recommend you to use this tool: https://mholt.github.io/json-to-go/

You will get something like:

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"`
}

Full example: https://play.golang.org/p/Q8PwwtS_QZ

Also you can always start with a map[string]interface{} instead of a struct.