在 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上,如果有人能看一下我会很高兴 感激。

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

对于大 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

您也可以在 https://play.golang.org/p/as9QJS4Cav

中查看此代码