我正在尝试解码原始 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
如果删除传输条目,它会起作用。
最佳答案
您输入的 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/