go - 由于编码,Unmarshal 返回空白对象
问题描述
我正在尝试解组原始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 字符串转义码中的无效字符“x”
如果传输条目被删除,它会起作用。
解决方案
您的输入不是有效的 JSON。JSON规范指出
除了必须转义的代码点外,所有代码点都可以放在引号内:引号 (U+0022)、反斜线 (U+005C) 和控制字符 U+0000 到 U+001F。
此外,虽然有两个字符的转义序列,\x
但不是其中之一,因此它被 Go 解析器正确解释为无效的转义序列。如果你想在你的 JSON 中有一个反斜杠文字,它需要\\
在 JSON 输入本身中表示。查看示例的修改版本:https: //play.golang.org/p/JZdPJGpPR5q
(请注意,这不是您的 Go 字符串文字的问题,因为您已经在使用原始 ( ``
) 字符串文字 - JSON 本身需要有两个反斜杠。)
推荐阅读
- ubuntu - 在 ubuntu 上恢复 clion 默认设置
- javascript - 如何使用用户输入修改数组(用 html 中的表格显示)
- php - Symfony POST Value Id 转换为实体
- django - Проблема с файлом wsgi.py(wsgi.py 文件的问题)
- flutter - 如何获取 sqflite 使用的 db 文件?
- html - 外部 CSS 字体系列未在浏览器中显示
- python - Python - 创建一个检查列表列表中的新元素的函数
- php - 如何从 Lumen 连接到 Firebird 数据库?
- python - 在 Python for 循环中使用 %s
- python - 标签和列表视图未显示在小部件上