// Format of your expected request
type request struct {
ACTIVE string `json:"active"`
CATEGORY string `json:"category"`
}
// struct to read JSON input
var myReq request
// Decode the received JSON request to struct
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&myReq)
if err != nil {
log.Println( err)
// Handler for invalid JSON received or if you want to decode the request using another struct with int.
return
}
defer r.Body.Close()
// Convert string to int
numActive, err = strconv.Atoi(myReq.ACTIVE)
if err != nil {
log.Println(err)
// Handler for invalid int received
return
}
// Convert string to int
numCategory, err = strconv.Atoi(myReq.CATEGORY)
if err != nil {
log.Println(err)
// Handler for invalid int received
return
}
4条答案
按热度按时间mcdcgff01#
使用“string”字段标记选项指定字符串应转换为数字。该选项的文档是:
“string”选项表示字段在JSON编码的字符串中存储为JSON。它仅适用于字符串,浮点,整数或布尔类型的字段。这种额外的编码级别有时在与JavaScript程序通信时使用:
以下是一个用途:
字符串
playground example
如果JSON值可以是number或string,则解组到interface{}并在解组后转换为int:
型
使用此函数将interface{}值转换为int:
型
brtdzjyr2#
字符串
9gm1akwq3#
我遇到了同样的问题,一个值列表的值是字符串或结构。我使用的解决方案是创建一个helper结构,其中包含预期类型的字段,并将值解析为正确的字段。
字符串
自定义
Unmarshaller
简化了代码。就我个人而言,我更喜欢interface{}
,因为它明确地说明了开发人员的期望。xqkwcwgp4#
go标准库“json/encoding”提供了一个
json.Number
类型,用于解析JSON数据中的字符串数字和整数。以下是一个用途:
字符串
json.Number
实际上是string
的别名,json.Unmarshal
在解组时专门处理它,以支持两种格式,如“123”和123。一旦你有了一个
json.Number
,你可以根据需要使用.Int64()
或.Float64()
方法来提取它的数值表示。playground example:
型
产出:
型