json.NewDecoder(r.Body).Decode(&m)
哪里
m
是包含SigFox api在回调上发送的信息的结构,也称为:
type SigFoxMessage struct {
Time int64 `json:"time"` // I'm getting an epoch timestamp, which I then convert to time.Time
Data [12]byte `json:"data"`
Lat int `json:"lat"`
Lng int `json:"lng"`
}
然而,这总是给我一个EOF错误,所以我决定继续
r.ParseForm()
r.Form["key"]
. 这种新方法的唯一问题是,它将参数的值作为字符串返回,这在处理
int
s和
int64
,因为我可以使用
strconv
因为它们是作为字符串接收的,这意味着我得到了类似于
"3132333435363738393130"
(以十六进制表示的12个字节,因此每个字节2个字符是确定的),我想将其转换为
[12]byte{31, 32, 33, 34, 35, 36, 37, 38, 39, 31, 30}
. 但除了实际实现一个函数来解析它之外,我找不到其他方法来做这件事。我试图搜索字符串到字节数组的转换,但我能找到的只是将字节数组转换为字符串的方法(这将是图灵方法)
[12]byte{'1', '2', '3', '4', '5', '6', '7', '8', '9', '1', '0'}
"12345678910"
,我对此不感兴趣),或者如何将字符串转换为字符数组(
"3132333435363738393130" -> []byte{'3', '1', '3', ... }
),我对此也不感兴趣。
无论如何,有没有一种不需要编写代码来解析它的实际方法?
还有,你知道为什么json解码器可能无法工作吗?
编辑:
我应该马上解决这个问题,请求的参数是这样的:
?time=1507834946&data=3132333435363738393130&lat=-8.0&lng=-35.0
编辑2:
数据参数以十六进制表示字节,因此每两个字符对应一个字节,范围从
00
ff
. 我提供的示例是在尝试使用SigFox发送消息时出现计数错误,只有11个字节。从我对Go的了解来看,这应该不是问题,因为我相信它会完成缺失的字节,所以我不认为这是json解码器失败的原因,但我现在将使用正确的字节数进行尝试。