【问题标题】:Parsing data from AWS api using Golang使用 Golang 从 AWS api 解析数据
【发布时间】:2020-09-12 21:09:53
【问题描述】:

我正在使用 Connect API 从特定实例获取所有联系流,并希望将它们存储在 DynamoDB 中。

type contactFlow struct {
  Arn string 
  ContactFlowType string
  Id string
  Name string
}

func HandleRequest(ctx context.Context) (string, error) {
    var contactFlowDetails []contactFlow

    mySession := session.Must(session.NewSession())

    connectSession := connect.New(mySession)
    connectInstance := &connect.ListContactFlowsInput{
        InstanceId: aws.String("INSTANCE_ID"),
    }

    connectResult, connectError := connectSession.ListContactFlows(connectInstance)

    connectResultFlow := connectResult.ContactFlowSummaryList
    connectFlowSummaryList := awsutil.Prettify(connectResultFlow)
    fmt.Println(connectFlowSummaryList)

    json.Unmarshal([]byte(connectFlowSummaryList), &contactFlowDetails)
    fmt.Println(contactFlowDetails)

我尝试使用的 API 是这样的:https://docs.aws.amazon.com/sdk-for-go/api/service/connect/#ListContactFlowsOutput

当我在 CloudWatch Logs 上打印出 connectFlowSummaryList 时,我确实得到了结果,但是当我打印出 contactFlowDetails 时它总是返回一个空数组 []。

编辑 1:我想我在解码时发现了潜在的问题。日志的结果如下所示:

[
{
Arn: "INSTANCE_ID",
ContactFlowType: "AGENT_WHISPER",
Id: "CONTACT_FLOW_ID",
Name: "Default agent whisper"
}
]

结果的键值不在双引号内,我该如何解码这样的结果?

谢谢!

【问题讨论】:

  • 检查json.Unmarshal的错误
  • 我认为这是您的 JSON 解码的问题。请尝试使用您要解码的字符串和解组代码创建一个简单的测试程序。隔离问题将使人们(甚至您)更容易理解它。 (例如,我对 AWS 一无所知,但对 Go 中的 JSON 解码了解很多。)
  • 我确实查看了日志,似乎发现了一个潜在的问题。如何将这样的字符串解码为 JSON 格式?
  • awsutil.Prettify 在 data 上给出你的字符串表示,使用 jsonData, err := json.Marshal(connectResultFlow) 获取 json 数据,然后使用 json.Unmarshal(jsonData, &contactFlowDetails) 或在 struct 中设置 maually 数据。
  • 非常感谢,这解决了问题:)

标签: json amazon-web-services api go amazon-connect


【解决方案1】:

您应该做的是将connectResultFlow.ContactFlowSummaryList 编组为json 字符串,然后再将其传递给awsutil.Prettify(如果需要)。

你也可以,完全跳过awsutil.Prettify,到达这个:

connectResultFlow := connectResult.ContactFlowSummaryList
b, err := json.Marshal(connectResultFlow)
if err != nil {
  return "", err
}
json.Unmarshal(b, &contactFlowDetails)
fmt.Println(contactFlowDetails)

【讨论】:

  • 谢谢!我直接使用了“b”,它按预期工作。
  • @DheerajNair 是的,我也在答案中添加了替代代码。
  • 你可以去掉 Prettify 部分没用的。
  • @Eklavya 我不确定Prettify 是否在内部做除了编组之外的其他任何事情,所以我把它留了下来以备不时之需。
猜你喜欢
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 2021-12-03
  • 2016-08-27
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
相关资源
最近更新 更多