使用 golang 将输出字符串转换为映射

Bil*_*ill 7 go

获取输出为

 {
   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"]
 }
Run Code Online (Sandbox Code Playgroud)

尝试使用键获取值作为映射 SecretString

d.Set("secret_string", output.SecretString)
Run Code Online (Sandbox Code Playgroud)

如何将其作为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"`
Run Code Online (Sandbox Code Playgroud)

并再次感谢提供测试代码,我会尝试一下。

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)
}

Run Code Online (Sandbox Code Playgroud)

Golang Playground 在这里试试

Bil*_*ill 5

@mkopriva

谢谢,请回答这个问题,所以我可以投票并接受它。

使用您的示例代码,我确实解决了这个问题。

-       d.Set("secret_string", output.SecretString)
+       var sec map[string]interface{}
+       if err = json.Unmarshal([]byte(*output.SecretString), &sec); err != nil {
+               return err
+       }
+       d.Set("secret_string", sec)
Run Code Online (Sandbox Code Playgroud)