Разбор JSON с GoLang в AWS Lamda - PullRequest
0 голосов
/ 11 июня 2019

В качестве части приложения, которое мы создаем, одним из этапов процесса является AWS Lamda, который фиксирует почтовый запрос, выполняет с ним некоторую работу, а затем перемещает один.Он имеет запрос API Gateway в качестве триггера, и тело этого запроса будет строкой JSON.У меня проблемы с анализом строки JSON для объекта GoLang.Вот что у меня есть:

Функция, которая перехватывает запрос:

func HandleRequest(ctx context.Context, event events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {

  log.Print(fmt.Sprintf("body:[%s] ", event.Body))

  parseResponseStringToTypedObject(event.Body)

  return events.APIGatewayProxyResponse{
     StatusCode: http.StatusOK,
     Body:       "OK",
  },  nil
}

Затем функция parseResponseStringToTypedObject:

func parseResponseStringToTypedObject(responseString string) {

  b := []byte(responseString)
  var resp SimpleType
  err := json.Unmarshal(b, &resp)

  if err == nil {
      log.Print(fmt.Sprintf("Account Name: [%s]", resp.accountName))
  } else {
      log.Print(fmt.Sprintf("Could not unmarshall JSON string: [%s]", err.Error()))
  }
}

Вот структура SimpleType:

type SimpleType struct {
  accountName string `json:accountName`
  amount      int    `json:amount`
}

Затем я, в качестве теста, опубликовал это тело JSON через почтальона: enter image description here

Я открыл журналы CloudWatch (где мои журналы lamdaк) и увидеть, что тело присутствует в свойстве event.Body, а затем выйти из поля в не маршалируемом объекте (resp.accountName). Я заметил, что поле пустое.Почему это?Вот вывод журнала для запроса:

enter image description here

1 Ответ

5 голосов
/ 11 июня 2019

Ваша SimpleType структура нуждается в двух вещах здесь ...

1) Свойства должны быть «общедоступными» или «экспортированными». Это означает, что они должны начинаться с заглавной буквы.

И

2) Для свойств нужны правильные теги для сериализации и десериализации JSON. например каждый тег JSON окружен "

type SimpleType struct {
  AccountName string `json:"accountName"`
  Amount int `json:"amount"`
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...