-1

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?

Jan Berndt
  • 913
  • 1
  • 10
  • 22

1 Answers1

1

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)
    }
}
ymonad
  • 11,710
  • 1
  • 38
  • 49