Go AWS Lambda处理POST嵌套JSON报invalid use of string struct tag错误
问题根因
报错直接指向JSON结构体标签使用错误,共有三处明显的配置问题:
EventParamsType中Name字段的json标签错误添加了,string选项。Go标准库encoding/json的,string标签仅适用于数值、布尔类型的字段,作用是从JSON的字符串格式中解析对应类型的值。如果字段本身就是string类型还加了,string,会要求JSON中对应的字段值是带转义引号的字符串嵌套格式(比如"name":"\"peter\""),你传入的普通字符串"peter"自然会解析失败。RequestBodyType和ResponseBodyType的Event字段标签写错了,你写的是string:"event,string,omitempty",json序列化/反序列化只会识别json:开头的标签,这也导致你返回的JSON字段名是大写的Event,不符合预期的小写event。RequestBodyType和ResponseBodyType的EventParams字段没有配置json标签,你请求中传递的键是小驼峰eventParams,和结构体字段的大驼峰命名不匹配,会导致参数解析失败。
修复方案
直接修改三处结构体的标签配置即可:
// RequestBodyType 是自定义结构体,用于处理客户端传入的JSON请求 type RequestBodyType struct { Event string `json:"event,omitempty"` EventParams EventParamsType `json:"eventParams,omitempty"` } // ResponseBodyType 是自定义结构体,用于构造返回给客户端的响应 type ResponseBodyType struct { Event string `json:"event,omitempty"` EventParams EventParamsType `json:"eventParams,omitempty"` } // 修复后的EventParamsType type EventParamsType struct { Name string `json:"name,omitempty"` Age int64 `json:"age,omitempty"` }
修改完成后再发送带嵌套参数的请求即可正常解析,返回结果也会符合预期的字段命名格式。
内容的提问来源于stack exchange,提问作者Valor_
相关产品推荐
相关产品推荐

