我有一个像这样的 JSON 文件:
[
{
"namespace": "pulsarNamespace1",
"name": "pulsarFunction1",
"tenant": "pulsarTenant1"
},
{
"namespace": "pulsarNamespace2",
"name": "pulsarFunction2",
"tenant": "pulsarTenant1"
}
]
Run Code Online (Sandbox Code Playgroud)
我正在尝试将此 JSON 数组反序列化/解组为一个结构片,但我得到的结构为空(默认)值。
当我运行我的代码时,它正确地将我的文件读入一个字符串,但它没有正确反序列化数据,只是将空结构写入控制台,如下所示:
[]main.Config{main.Config{namespace:"", tenant:"", name:""}, main.Config{namespace:"", tenant:"", name:""}}
命名空间:名称:%!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)
}
}
Run Code Online (Sandbox Code Playgroud)
此外,如果我理解 using 的目的omitempty,那么它甚至不应该写空字段。然而,它似乎无论如何都在写它们。
如何正确地将我的 JSON 数组反序列化/解组到 Golang 中的结构片段中?
导出结构的字段名称:Namespace、Tenant、Name 等,以便解组器可以通过反射设置它们。
回复:省略,这是 json 封送拆收器的标签。如果您使用空字符串将结构编组为 json,则这些字段将被省略。如果您 printf 结构,它们将被打印。
| 归档时间: |
|
| 查看次数: |
1799 次 |
| 最近记录: |