在AWS Lamda中使用GoLang解析JSON

在AWS Lamda中使用GoLang解析JSON,json,amazon-web-services,go,Json,Amazon Web Services,Go,作为我们正在构建的应用程序的一部分,其中一个过程步骤是AWS Lamda,它捕获post请求并对其进行处理,然后移动一个post请求。它有一个API网关请求作为触发器,该请求的主体是一个JSON字符串。我无法将JSON字符串解析为GoLang对象。以下是我所拥有的: 捕获请求的函数: func HandleRequest(ctx context.Context, event events.APIGatewayProxyRequest) (events.APIGatewayProxyRespons

作为我们正在构建的应用程序的一部分,其中一个过程步骤是AWS Lamda,它捕获post请求并对其进行处理,然后移动一个post请求。它有一个API网关请求作为触发器,该请求的主体是一个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正文:

我打开了CloudWatch日志(我的lamda日志记录到的位置),看到body出现在
event.body
属性中,然后注销了unmarshalled对象(resp.accountName)中的一个字段。我注意到该字段为空。为什么会这样?以下是请求的日志输出:


您的
SimpleType
结构在这里需要两样东西

1) 属性需要为“公共”或“导出”。这意味着它们需要以大写字符开头

2) 属性需要适当的标记来序列化和反序列化JSON。e、 g.每个JSON标记周围都有

键入SimpleType结构{
AccountName字符串`json:“AccountName”`
Amount int`json:“Amount”`
}

希望这有帮助!

您将
if
else
分支放错了位置。条件是
if err!=nil
,错误分支位于
else
上。这意味着当您的
err
nil
时,执行
else
分支并调用
error.error()< /代码>这会导致运行时的恐慌。啊,我明白了,错误被抛出了,谢谢!现在我把这个对象解封了,但是值是空白的——会更新这个问题。<代码> SimpleType < /COD>看起来是什么?空白值可能和标签是如何定义的有关的,我想我把它放在那里了,UPDATE。他把邮递员叫来了。