我有一个像这样的JSON文件:
[
{
"namespace": "pulsarNamespace1",
"name": "pulsarFunction1",
"tenant": "pulsarTenant1"
},
{
"namespace": "pulsarNamespace2",
"name": "pulsarFunction2",
"tenant": "pulsarTenant1"
}
]
我试图将这个JSON数组反序列化/解组为结构片段,但是我正在获取具有空(默认)值的结构。
运行代码时,它可以正确地将文件读取为字符串,但是并不能正确地反序列化数据,而只是将空结构写入控制台,如下所示:
[] main.Config {main.Config {namespace:“”,承租人:“”,名称:“”}}, main.Config {namespace:“”,承租人:“”,名称:“”}}}
命名空间:名称:%!d(string =)
命名空间:名称:%!d(string =)
这是我在Go中的代码:
package main
import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
)
// Ignore the unused imports.
type Config struct {
namespace string `json:"namespace,omitempty"`
tenant string `json:"tenant,omitempty"`
name string `json:"name,omitempty"`
}
func getConfigs() string {
b, err := ioutil.ReadFile("fastDeploy_example.json") // just pass the file name
if err != nil {
fmt.Print(err)
}
str := string(b) // convert content to a 'string'
fmt.Println(str) // print the content as a 'string'
return str
}
func deserializeJson(configJson string) []Config {
jsonAsBytes := []byte(configJson)
configs := make([]Config, 0)
err := json.Unmarshal(jsonAsBytes, &configs)
fmt.Printf("%#v\n", configs)
if err != nil {
panic(err)
}
return configs
}
func main() {
// Unmarshal each fastDeploy config component into a slice of structs.
jsonConfigList := getConfigs()
unmarshelledConfigs := deserializeJson(jsonConfigList)
for _, configObj := range unmarshelledConfigs {
fmt.Printf("Namespace: %s Name: %d\n", configObj.namespace, configObj.name)
}
}
此外,如果我了解使用omitempty
的目的,那么它甚至都不应该编写空白字段。但是,看来它还是在写它们。
如何在Golang中正确地反序列化/解组JSON数组到我的结构片中?
答案 0 :(得分:4)
导出结构的字段名称:命名空间,租户,名称等,以便解组器可以通过反射对其进行设置。
回复:omitempty,这是json封送拆收器的标签。如果使用空字符串将结构封送至json,则这些字段将被省略。如果您打印该结构,则将打印它们。