I have a JSON file like this:
[
{
"namespace": "pulsarNamespace1",
"name": "pulsarFunction1",
"tenant": "pulsarTenant1"
},
{
"namespace": "pulsarNamespace2",
"name": "pulsarFunction2",
"tenant": "pulsarTenant1"
}
]
I am attempting to deserialize/unmarshal this JSON array into a slice of structs, but I'm getting structs with empty (default) values.
When I run my code, it correctly reads my file into a string, but it's not deserializing the data correctly and just writes empty structs to the console, like this:
[]main.Config{main.Config{namespace:"", tenant:"", name:""}, main.Config{namespace:"", tenant:"", name:""}}
Namespace: Name: %!d(string=)
Namespace: Name: %!d(string=)
Here's my code in 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
", 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
", configObj.namespace, configObj.name)
}
}
Moreover, if I understand the purpose of using omitempty
, then it shouldn't even be writing the empty fields. However, it appears that it's writing them anyway.
How do I correctly deserialize/unmarshal my JSON array into my slice of structs in Golang?