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

标签 json go

我在处理 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 整除时编码成功,例如abcdabcdefgh 有效,而 abcde 和 abcdefg` 无效。

既然我知道错误是什么 base64 字符串就很有意义了。此处引用:

维基百科:http://en.wikipedia.org/wiki/Base64

转换工具:http://www.string-functions.com/base64encode.aspx

最佳答案

来自 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,它将起作用

Go Playground

关于json - Go - 奇怪的 json 连字符解码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28464711/

相关文章:

sql - Presto 生成 JSON 结果

java - 无法反序列化对 java 类对象的响应

python - 如何在 python 中仅使用键比较 2 个 JSON

基于map接口(interface)数组中的key的golang过滤器

python - 这个 HTTP 请求有效吗?

go - 发生异常时继续执行循环

ruby-on-rails - 使用火箭裤时如何配置JSON响应?

json - 如何在服务器端最好地验证JSON

unit-testing - Gomega 是否可以支持验证不同类型的多个返回值,其中最后一个不是 `error` ?

go - 如何在H3库中查找给定半径(Km)处基本单元的邻居索引/单元