我在使用 json 字符串时遇到了一个非常奇怪的错误。当我将字符串的键值对添加到 json 输入时,首先引入了该问题,即"DeviceIdentifier": "device-id". 我将代码缩减到显示错误所需的最低限度。当我对该键值对中的数据进行几乎任何更改时,错误就会消失,这对我来说似乎很奇怪。我可以使用其他键来规避错误,但似乎我在这里遗漏了一些东西。要么是这样,要么库函数似乎有问题......有什么想法吗?package mainimport ( "encoding/json" "fmt")type S struct { Name string DeviceIdentifier []byte}func main() { var s S data := []byte(`{"Name": "test", "DeviceIdentifier": "device-id"}`) if err := json.Unmarshal(data, &s); err != nil { fmt.Println(err.Error()) }}去游乐场链接:http : //play.golang.org/p/huXuaokGikJson 包文档:http : //golang.org/pkg/encoding/json/更新我刚刚发现当值字符串的长度可以被 4 整除时,编码会成功,例如abcd并且abcdefgh有效,而abcde和 abcdefg` 则不然。现在我知道什么是 base64 字符串,错误很有意义。参考这里:维基百科:http : //en.wikipedia.org/wiki/Base64转换工具:http : //www.string-functions.com/base64encode.aspx
2 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
来自json 包文档:
数组和切片值编码为 JSON 数组,除了 []byte 编码为 base64 编码的字符串,而 nil 切片编码为 null JSON 对象。
所以如果你改变你的结构,DeviceIdentifier string
它会起作用
30秒到达战场
TA贡献1828条经验 获得超6个赞
只是要注意另一种可能性,为了将 struct 字段保持为 a []byte
,它也可以很好地在客户端实际执行 base64 编码,以便通过 json 传递的值代表 base64 中有效的值。这是我最终在我的项目中使用的解决方案。json.Marshal()
Go 中的函数会为包含字节切片的结构自动执行此操作。
- 2 回答
- 0 关注
- 170 浏览
添加回答
举报
0/150
提交
取消