我在trial.go
中编写了以下代码段:
type Mine struct{
A string `json:"a"`
}
func main(){
s := Mine{}
v := os.Args[1]//`{"a":"1"}`
fmt.Println(v)
fmt.Println(reflect.TypeOf(v))
json.Unmarshal([]byte(v), &s)
fmt.Println(s)
}
我正在运行此文件,如下所示:
go run trial.go `{"A":"1"}`
但我在s
中没有得到任何结果。它总是一个空白的结构。
我在这里做错了什么?
答案 0 :(得分:1)
首先检查json.Unmarshal()
返回的错误。
接下来,您的json
代码使用小"a"
作为JSON密钥,但encoding/json
包也会识别大写"A"
。
最后在命令行中传递这些参数可能是OS(shell)特定的。反引号和引号通常具有特殊含义,尝试传递它:
go run trial.go {\"a\":\"1\"}
此外,您应该在索引之前检查os.Args
的长度,如果用户没有提供任何参数,os.Args[1]
将会发生恐慌。
正如您所提到的,您应该找到另一种测试输入JSON文档的方法,如果JSON文本较大,这将变得不可行,并且这也是特定于OS(shell)的。更好的方法是从标准输入读取或从文件中读取。