我在处理 json 字符串时遇到了一个非常奇怪的错误。当我将一对字符串的键值对添加到 json 输入时,这个问题首先被引入,它是 "DeviceIdentifier": "device-id"
。我将代码缩减到显示错误所需的最低限度。当我对该键值对中的数据进行几乎任何更改时,错误就会消失,这对我来说似乎很奇怪。我可以使用其他键来规避错误,但似乎我在这里遗漏了一些东西。要么是这样,要么是库函数似乎有问题……有什么想法吗?
package main
import (
"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())
}
}
Go Playground 链接:http://play.golang.org/p/huXuaokGik
Json 包文档:http://golang.org/pkg/encoding/json/
更新
我刚刚发现当值字符串的长度可以被 4 整除时编码成功,例如abcd
和 abcdefgh
有效,而 abcde
和 abcdefg` 无效。
既然我知道错误是什么 base64 字符串就很有意义了。此处引用:
最佳答案
来自 json package文档:
Array and slice values encode as JSON arrays, except that []byte encodes as a base64-encoded string, and a nil slice encodes as the null JSON object.
因此,如果您将结构更改为 DeviceIdentifier string
,它将起作用
关于json - Go - 奇怪的 json 连字符解码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28464711/