在AWS Lamda中使用GoLang解析JSON
作为我们正在构建的应用程序的一部分,其中一个过程步骤是AWS Lamda,它捕获post请求并对其进行处理,然后移动一个post请求。它有一个API网关请求作为触发器,该请求的主体是一个JSON字符串。我无法将JSON字符串解析为GoLang对象。以下是我所拥有的: 捕获请求的函数:在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
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。他把邮递员叫来了。