AWS SDK GO JSON解组嵌套响应
我试图利用AWS GO SDK检索我有权访问“SecretList”的所有AWS Secret Manager机密的列表,然后返回嵌套的ARN和每个机密的名称,以供将来的函数循环使用。当我试图解组我认为是JSON的响应,但可能是另一种我不知道的格式时,问题就出现了 回应AWS SDK GO JSON解组嵌套响应,json,amazon-web-services,go,unmarshalling,aws-sdk-go,Json,Amazon Web Services,Go,Unmarshalling,Aws Sdk Go,我试图利用AWS GO SDK检索我有权访问“SecretList”的所有AWS Secret Manager机密的列表,然后返回嵌套的ARN和每个机密的名称,以供将来的函数循环使用。当我试图解组我认为是JSON的响应,但可能是另一种我不知道的格式时,问题就出现了 回应 { SecretList: [{ ARN: "arn:aws:secretsmanager:us-east-2:12345676879:secret:service1/secret-1-example-
{
SecretList: [{
ARN: "arn:aws:secretsmanager:us-east-2:12345676879:secret:service1/secret-1-example-DLGoLU",
CreatedDate: 1990-09-01 23:26:47.717 +0000 UTC,
LastAccessedDate: 1990-10-01 00:00:00 +0000 UTC,
LastChangedDate: 1990-10-01 00:39:08.623 +0000 UTC,
Name: "service1/secret-1-example",
SecretVersionsToStages: {
d35edf0b0-232a-4df2-a723-c873ad5b5ec52: ["AWSCURRENT"]
}
},{
ARN: "arn:aws:secretsmanager:us-east-2:12345676879:secret:service-2/example-2-TXAGC3",
CreatedDate: 1990-10-01 23:58:32.279 +0000 UTC,
LastAccessedDate: 1990-10-01 00:00:00 +0000 UTC,
LastChangedDate: 1990-10-01 02:22:02.525 +0000 UTC,
Name: "service-2/example-2",
SecretVersionsToStages: {
41b456565452-91b8-41e0-a0d5-ac34356a221f3da: ["AWSCURRENT"]
},
Tags: [{
Key: "Team",
Value: "team"
},
Key: "Name",
Value: "service-2"
}]
}]
}
密码
package main
import (
"encoding/json"
"fmt"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/secretsmanager"
)
func getSecretManager() *secretsmanager.SecretsManager {
sess := session.Must(session.NewSessionWithOptions(session.Options{
SharedConfigState: session.SharedConfigEnable,
}))
return secretsmanager.New(sess)
}
// SecretsList ...
type SecretsList struct {
SecretList []struct {
ARN string `json:"ARN"`
Name string `json:"name"`
} `json:"SecretList"`
}
func main() {
svc := getSecretManager()
input := &secretsmanager.ListSecretsInput{}
result, err := svc.ListSecrets(input)
if err != nil {
if aerr, ok := err.(awserr.Error); ok {
switch aerr.Code() {
case secretsmanager.ErrCodeInvalidParameterException:
fmt.Println(secretsmanager.ErrCodeInvalidParameterException, aerr.Error())
case secretsmanager.ErrCodeInvalidNextTokenException:
fmt.Println(secretsmanager.ErrCodeInvalidNextTokenException, aerr.Error())
case secretsmanager.ErrCodeInternalServiceError:
fmt.Println(secretsmanager.ErrCodeInternalServiceError, aerr.Error())
default:
fmt.Println(aerr.Error())
}
} else {
// Print the error, cast err to awserr.Error to get the Code and
// Message from an error.
fmt.Println(err.Error())
}
return
}
var secrets SecretsList
json.Unmarshal([]byte(result.String()), &secrets)
fmt.Println("SecretList: ", secrets.SecretList[0])
// json.Unmarshal([]byte(result.String()), &secret)
// fmt.Println("Secret: ", secret)
// fmt.Println(secret)
// fmt.Println(result)
}
检索ARN值根本不需要执行JSON解组。该文件规定,合同如下:
ListSecrets(input *ListSecretsInput) (*ListSecretsOutput, error)
查看对象,有一个嵌套的类型切片,其中包含机密的ARN、机密的名称等。Golang中的大多数SDK函数都遵循类似的格式。可能是您的
SecretList
结构中的大小写问题:名称字符串
此外,您不需要json:或json:“SecretList”
因为名称与字段匹配。JSON没有日期类型,因此响应中的日期值无效JSON:CreatedDate:1990-09-01 23:26:47.717+0000 UTC