I basically copypasted this code from the documentation of the json package. In the provided example, the values of the JSON objects are strings. Here, I tried using integers instead.
package main
import (
"encoding/json"
"fmt"
"io"
"log"
"strings"
)
func main() {
const jsonStream = `{"serverTime":35678}`
type Message struct {
serverTime int
}
dec := json.NewDecoder(strings.NewReader(jsonStream))
for {
var m Message
if err := dec.Decode(&m); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
fmt.Printf("its %v o clock\n", m.serverTime)
}
}
m.ServerTime
should now be 35678, however, it's just 0. What am I doing wrong?
as document describes
The json package only accesses the exported fields of struct types (those that begin with an uppercase letter). Therefore only the the exported fields of a struct will be present in the JSON output.
so change serverTime
to ServerTime
, and add json tags json:"serverTime"
package main
import (
"encoding/json"
"fmt"
"io"
"log"
"strings"
)
func main() {
const jsonStream = `{"serverTime":35678}`
type Message struct {
ServerTime int `json:"serverTime"`
}
dec := json.NewDecoder(strings.NewReader(jsonStream))
for {
var m Message
if err := dec.Decode(&m); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
fmt.Printf("its %v o clock\n", m.ServerTime)
}
}