2016-11-26 69 views
1

#1:解組陣列在JSON結構

我一直在努力解編什麼,我不會考慮在GO特別複雜 JSON響應。 (我很新)。示例如下:

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

我試圖將此表示爲一個結構數組,但它似乎永遠不會連接。

我把我的代碼放在GO Lang的操場上,如果任何人都可以看看,我會非常讚賞 。

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

回答

1

對於大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{}開始,而不是結構。

+1

這JSON檢查這個代碼去GO Struct是不可思議的!謝謝 – user3888307

0

請更改結構如下。

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

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


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

    } 

您會在編碼時得到打印的目標ID。

{[{00u34k73otQGIAFUALPR}]} 
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":"[email protected]", 
       "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: [email protected] 
targets.objectType: User 

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