【发布时间】:2021-06-26 08:46:17
【问题描述】:
获取输出为
{
ARN: "arn:aws:secretsmanager:us-east-2:xxxx:secret:team_dev-Xhzkt6",
CreatedDate: 2018-07-05 06:50:07 +0000 UTC,
Name: "team_dev",
SecretString: "{\"password\":\"test\"}",
VersionId: "6b65bfe4-7908-474b-9ae6-xxxx",
VersionStages: ["AWSCURRENT"]
}
尝试使用键SecretString获取值作为映射
d.Set("secret_string", output.SecretString)
如何获得Schema TypeMap?
有了jq,我可以很容易地得到它,但不知道如何在golang中做到这一点。
更新
谢谢,@mkopriva
在 aws sdk (github.com/aws/aws-sdk-go/service/secretsmanager/api.go) 中,output (GetSecretValueOutput) 定义为 type:"structure"
type GetSecretValueOutput struct {
_ struct{} `type:"structure"`
再次感谢提供测试代码,我试试看。
package main
import (
"encoding/json"
"fmt"
)
func main() {
secretString := "{\"password\":\"test\"}"
sec := map[string]interface{}{}
if err := json.Unmarshal([]byte(secretString), &sec); err != nil {
panic(err)
}
fmt.Println(sec)
}
【问题讨论】:
-
如果输出是
map[string]interface{},那么output["SecretString"]。返回值的类型将是interface{},因此您需要将其断言为string。 -
谢谢,我先试试
-
得到这个错误:无效操作:输出[“SecretString”](类型*secretsmanager.GetSecretValueOutput 不支持索引)
-
那表示输出不是Schema TypeMap。
-
查看源代码 (github.com/aws/aws-sdk-go/blob/master/service/secretsmanager/…) 似乎您可以做您一开始正在做的事情,但您需要取消引用该字段,因为它是一个指针。试试
d.Set("secret_string", *output.SecretString),但首先要确保它不是nil。
标签: go