当我们将空的Json解组到golang中的struct时会发生什么?

时间:2019-07-12 03:14:12

标签: json go

我在将空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)

}

2 个答案:

答案 0 :(得分:1)

对于这一行:var respBytes = []byte{}您创建了一个空字节片。哪个json.Unmarshal doc无法正确解析。因为 Empty 不是有效的JSON字符串。

这是解组“空” JSON字符串的方法:

var respBytes = []byte(`{}`)

Go JSON example

答案 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无法成功检索结果