Разбор данных из AWS api с использованием Golang - PullRequest
0 голосов
/ 26 мая 2020

Я использую 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

Я получаю результат, когда распечатываю connectFlowSummaryList в CloudWatch Logs, но он всегда возвращает пустой массив [], когда я распечатываю contactFlowDetails .

Редактировать 1: Думаю, я обнаружил, в чем может быть потенциальная проблема при выполнении этого декодирования. Результат из журналов выглядит примерно так:

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

Ключевые значения результата отсутствуют внутри двойных кавычек, как я мог go расшифровывать такой результат?

Спасибо!

1 Ответ

3 голосов
/ 26 мая 2020

Что вам нужно сделать, так это маршалировать 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)
...