解组JSON结构中的数组

时间:2016-11-26 02:24:08

标签: arrays json go unmarshalling

#1:

我一直在努力解散我不认为特别复杂的东西 GO中的JSON响应。 (我很新)。示例如下:

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

我尝试将其表示为一个结构数组,但它似乎永远不会连接。

我把我的代码放在GO Lang游乐场,如果有人可以看看我会非常 赞赏。

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

3 个答案:

答案 0 :(得分:1)

对于大型json文档,我建议您使用此工具:https://mholt.github.io/json-to-go/

你会得到类似的东西:

    class Neighbor {
        public int vertexNum;
        public Neighbor next;
        public Neighbor(int vnum, Neighbor nbr) {
                this.vertexNum = vnum;
                next = nbr;
        }
    }

    class Vertex {
        String name;
        Neighbor adjList;
        Vertex(String name, Neighbor neighbors) {
                this.name = name;
                this.adjList = neighbors;
        }
    }
private void dfs(int v, boolean[] visited) {
        visited[v] = true;
        System.out.println("visiting " + adjLists[v].name);
        for (Neighbor nbr=adjLists[v].adjList; nbr != null; nbr=nbr.next) {
            if (!visited[nbr.vertexNum]) {
                System.out.println("\n" + adjLists[v].name + "--" + adjLists[nbr.vertexNum].name);
                dfs(nbr.vertexNum, visited);
            }
        }
    }

public void dfs() {
        boolean[] visited = new boolean[adjLists.length];
        for (int v=0; v < visited.length; v++) {
            if (!visited[v]) {
                System.out.println("\nSTARTING AT " + adjLists[v].name);
                dfs(v, visited);
            }
        }
    }

完整示例:https://play.golang.org/p/Q8PwwtS_QZ

此外,您始终可以使用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"` } 而不是结构。

答案 1 :(得分:0)

请更改结构如下。

type  zMessage  struct {
        Message string `json:"message"`
    }

    type zTargets struct {
        Idtarget string `json:"id"`
    }


    var  val  struct {       
        Targets [] zTargets `json:"targets"`         

    }

您将在编码时打印目标ID。

{[{00u34k73otQGIAFUALPR}]}

答案 2 :(得分:0)

您需要修改结构并使用此示例中的代码:

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

中查看此代码