go - 由于编码,Unmarshal 返回空白对象

标签 go

我正在尝试解码原始 json 字符串。编码似乎有错误,但我不太明白。

主要包

import (
    "encoding/json"
    "fmt"
    "log"
)

type Foo struct {
    Transmission string `json:"transmission"`
    Trim         string `json:"trim"`
    Uuid         string `json:"uuid"`
    Vin          string `json:"vin"`
}

func main() {

    var foo Foo

    sample := `{
        "transmission": "continuously\x20variable\x20automatic",
        "trim": "SL",
        "uuid" : "6993e4090a0e0ae80c59a76326e360a1",
        "vin": "5N1AZ2MH6JN192059"
    }`

    err := json.Unmarshal([]byte(sample), &foo)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(foo)

}

2009/11/10 23:00:00 invalid character 'x' in string escape code

如果删除传输条目,它会起作用。

Here is a working playground .

最佳答案

您输入的 JSON 无效。 JSON spec指出

All code points may be placed within the quotation marks except for the code points that must be escaped: quotation mark (U+0022), reverse solidus (U+005C), and the control characters U+0000 to U+001F.

此外,虽然有两个字符的转义序列,但 \x 不是其中之一,因此它被 Go 解析器正确解释为无效的转义序列。如果您想在 JSON 中使用反斜杠文字,则需要在 JSON 输入本身中用 \\ 表示。查看示例的修改版本:https://play.golang.org/p/JZdPJGpPR5q

(请注意,这不是您的 Go 字符串文字的问题,因为您已经在使用原始 (``) 字符串文字——JSON 本身需要有两个反斜杠。)

关于go - 由于编码,Unmarshal 返回空白对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53038095/

相关文章:

go - go lang : '[]string{f(v)}...' 中的可变参数打包和解包

go - 如何在 Go 中将常量设置为负值

arrays - 这个使用范围的简单 For 循环如何以及为什么在 Go 中打印一个简单的 3D 数组?

go - 非导出类型的类型断言

go - 无法模拟结构进行测试

python - 将 Python Thrift 客户端与 Go gRPC 服务器接口(interface)

结构没有被完全编码

html - 如何在 Gin 上返回 html?

json - 使用 Go 的 restful Web 服务的 POST 方法(对于 JSON)的 Curl 命令的 500 内部服务器错误

go - 以人类可读格式解码 X509 证书 - Golang