【问题标题】:convert output string to map with golang使用 golang 将输出字符串转换为映射
【发布时间】: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)
}

Golang Playground Try Here

【问题讨论】:

  • 如果输出是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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2021-12-25
    相关资源
    最近更新 更多