AWS SDK GO 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-

我试图利用AWS GO SDK检索我有权访问“SecretList”的所有AWS Secret Manager机密的列表,然后返回嵌套的ARN和每个机密的名称,以供将来的函数循环使用。当我试图解组我认为是JSON的响应,但可能是另一种我不知道的格式时,问题就出现了

回应

{
  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