2017-01-16 50 views
0

Go中的結構和JSON並不是非常有趣。GO Lang解碼JSON(簡單的數組未被拾取)

我有一個JSON和一個結構的簡單例子。一切似乎都被解析好了,但由於某種原因,陣列沒有被拾取。

誰能告訴我我可能會錯過什麼。

代碼--- 包主要

import (
    "encoding/base64" 
    "fmt" 
    "encoding/json" 
) 

type Oauth struct { 
Aud string `json:"aud"` 
Cid string `json:"cid"` 
Exp int  `json:"exp"` 
Iat int  `json:"iat"` 
Iss string `json:"iss"` 
Jti string `json:"jti"` 
Scp []string `json:"scp"` 
Sub string `json:"sub"` 
UID string `json:"uid"` 
Ver int  `json:"ver"` 
} 

func main() { 

// This is the String {"ver":1,"jti":"AT.zgv9oQpw-7l3BCg6Xb5NCG2Pf8zxgiQa1EUBXycmaDk","iss":"https://companyx.okta.com/oauth2/aus1a4ibdat0JYw5s1d8","aud":"http://localhost","iat":1484538606,"exp":1484542206,"cid":"3jmNvVCFZ5F6lWOzIONO","uid":"00uy74c0h7NGTLBSXQOC","scp":["read","remove","reserve"],"sub":"[email protected]"} 
encoded := "eyJ2ZXIiOjEsImp0aSI6IkFULnpndjlvUXB3LTdsM0JDZzZYYjVOQ0cyUGY4enhnaVFhMUVVQlh5Y21hRGsiLCJpc3MiOiJodHRwczovL2NvbXBhbnl4Lm9rdGEuY29tL29hdXRoMi9hdXMxYTRpYmRhdDBKWXc1czFkOCIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3QiLCJpYXQiOjE0ODQ1Mzg2MDYsImV4cCI6MTQ4NDU0MjIwNiwiY2lkIjoiM2ptTnZWQ0ZaNUY2bFdPeklPTk8iLCJ1aWQiOiIwMHV5NzRjMGg3TkdUTEJTWFFPQyIsInNjcCI6WyJyZWFkIiwicmVtb3ZlIiwicmVzZXJ2ZSJdLCJzdWIiOiJva3RhYWRtaW5Ab2t0YS5jb20ifQ" 

data, _ := base64.StdEncoding.DecodeString(encoded) 

fmt.Println(string(data)) 
fmt.Println ("") 

var x Oauth 
json.Unmarshal([]byte(data), &x) 
fmt.Printf ("%+v",x.Scp); 

} 

的結果總是空數組[]

+0

我把代碼放在GoLang遊樂場,使其更容易看到我所看到的:https://play.golang.org/p/ Pebw7UgGRC – user3888307

回答

2

編碼字符串不是有效的JSON,容易察覺,因爲你忽略Unmarshal上的一個重要錯誤,試試這個:

err := json.Unmarshal(data, &x) 
fmt.Println(err) 

看起來你錯過了你的JSO的最後'}' N.

0

您的base64編碼字符串無效:

illegal base64 data at input byte 404