Go - 奇怪的 json 连字符解组错误

我在使用 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())

    }

}

去游乐场链接:http : //play.golang.org/p/huXuaokGik


Json 包文档: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


慕工程0101907
浏览 171回答 2
2回答

白衣非少年

来自json 包文档:数组和切片值编码为 JSON 数组,除了 []byte 编码为 base64 编码的字符串,而 nil 切片编码为 null JSON 对象。所以如果你改变你的结构,DeviceIdentifier string它会起作用

30秒到达战场

只是要注意另一种可能性,为了将 struct 字段保持为 a []byte,它也可以很好地在客户端实际执行 base64 编码,以便通过 json 传递的值代表 base64 中有效的值。这是我最终在我的项目中使用的解决方案。json.Marshal()Go 中的函数会为包含字节切片的结构自动执行此操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go