我在将空JSON字符串解析为Golang中的结构时遇到问题。在操场上,当我运行此代码时,封送功能将返回unexpected end of JSON input
。但这是我们将空的JSON字符串解析为结构时Golang的正式返回吗?
package main
import (
"encoding/json"
"fmt"
)
var respBytes = []byte{}
type ResultStruct struct {
result []map[string]string
}
func main() {
var jsonData ResultStruct
err := json.Unmarshal(respBytes, &jsonData)
fmt.Println(err)
}
答案 0 :(得分:1)
对于这一行:var respBytes = []byte{}
您创建了一个空字节片。哪个json.Unmarshal
doc无法正确解析。因为 Empty 不是有效的JSON字符串。
这是解组“空” JSON字符串的方法:
var respBytes = []byte(`{}`)
答案 1 :(得分:1)
您应该使用Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.py]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.py\shell]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.py\shell\editwithidle]
"MUIVerb"="&Edit with IDLE"
"Subcommands"=""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.py\shell\editwithidle\shell]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.py\shell\editwithidle\shell\edit35]
"MUIVerb"="Edit with IDLE 3.5 (64-bit)"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.py\shell\editwithidle\shell\edit35\command]
@="\"C:\\Program Files\\Python35\\pythonw.exe\" -m idlelib \"%1\" %*"
或var respBytes = []byte(``)
现在您的问题是,如果我们将空json解组到struct中,那么它将跳过它。
以下代码仅使jsonData ResultStruct具有初始值:
var respBytes = []byte(`{}`)
现在,即使使用默认初始化,它也会打印出相同的内容:
var jsonData ResultStruct
err := json.Unmarshal([]byte(`{}`), &jsonData)
fmt.Println(err)
fmt.Println(jsonData)
检查解组是否成功(或有意义)的唯一方法是使用指针类型。指针默认为零(或在初始化时)。如果数据在其中正确解组,则它们将指向正确的值,否则将保持为零。您可以利用它并在指针var jsonData ResultStruct
fmt.Println(jsonData)
上使用nil检查。
if jsonData.Result == nil {}
在上面的情况2中,我们可以检查jsonData2.Result是否为nil。如果为零,则表示Unmarshal无法成功检索结果