如何使用 Go 将此 JSON 数组解组为结构体切片?

dev*_*ost 1 arrays json go

我有一个像这样的 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 中的结构片段中?

Bur*_*dar 6

导出结构的字段名称:Namespace、Tenant、Name 等,以便解组器可以通过反射设置它们。

回复:省略,这是 json 封送拆收器的标签。如果您使用空字符串将结构编组为 json,则这些字段将被省略。如果您 p​​rintf 结构,它们将被打印。


归档时间:

查看次数:

1799 次

最近记录:

6 年,5 月 前