JSON and Data Exchange
Marshal Struct
A Go struct can be represented as JSON text with field names and values.
marshal
Marshaling is the idea of turning structured data into a JSON string that can be exchanged with another program.
Marshal Struct
marshal_struct.go
Replay: real traced execution (multi-file project)
package main
import (
"fmt"
"strconv"
)
type Badge struct {
Name string
Points int
}
func main() {
var name = "Ada"
badge := Badge{Name: name, Points: 7}
text := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name), badge.Points)
fmt.Println("name=", badge.Name)
fmt.Println("points=", badge.Points)
fmt.Println("json=", text)
}
package main
import (
"fmt"
"strconv"
)
type Badge struct {
Name string
Points int
}
func main() {
var name = "Grace"
badge := Badge{Name: name, Points: 7}
text := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name), badge.Points)
fmt.Println("name=", badge.Name)
fmt.Println("points=", badge.Points)
fmt.Println("json=", text)
}
package main
import (
"fmt"
"strconv"
)
type Badge struct {
Name string
Points int
}
func main() {
var name = "Linus"
badge := Badge{Name: name, Points: 7}
text := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name), badge.Points)
fmt.Println("name=", badge.Name)
fmt.Println("points=", badge.Points)
fmt.Println("json=", text)
}
name ← "Ada", badge ← main.Badge{Name:"Ada", Points:7}, text ← "{\"name\":\"Ada\",\"points\":7}"
13func main() {14 var name→ "Ada" = "Ada" //@name="Grace", "Linus"15 badge→ main.Badge{Name:"Ada", Points:7} := Badge{Name: name"Ada", Points: 7}1617 text→ "{\"name\":\"Ada\",\"points\":7}" := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name"Ada"), badge.Points7)18 fmt.Println("name=", badge.Name"Ada")19 fmt.Println("points=", badge.Points7)20 fmt.Println("json=", text"{\"name\":\"Ada\",\"points\":7}")21}outputname= Ada points= 7 json= {"name":"Ada","points":7}
name ← "Grace", badge ← main.Badge{Name:"Grace", Points:7}, text ← "{\"name\":\"Grace\",\"points\":7}"
13func main() {14 var name→ "Grace" = "Grace"15 badge→ main.Badge{Name:"Grace", Points:7} := Badge{Name: name"Grace", Points: 7}1617 text→ "{\"name\":\"Grace\",\"points\":7}" := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name"Grace"), badge.Points7)18 fmt.Println("name=", badge.Name"Grace")19 fmt.Println("points=", badge.Points7)20 fmt.Println("json=", text"{\"name\":\"Grace\",\"points\":7}")21}outputname= Grace points= 7 json= {"name":"Grace","points":7}
name ← "Linus", badge ← main.Badge{Name:"Linus", Points:7}, text ← "{\"name\":\"Linus\",\"points\":7}"
13func main() {14 var name→ "Linus" = "Linus"15 badge→ main.Badge{Name:"Linus", Points:7} := Badge{Name: name"Linus", Points: 7}1617 text→ "{\"name\":\"Linus\",\"points\":7}" := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name"Linus"), badge.Points7)18 fmt.Println("name=", badge.Name"Linus")19 fmt.Println("points=", badge.Points7)20 fmt.Println("json=", text"{\"name\":\"Linus\",\"points\":7}")21}outputname= Linus points= 7 json= {"name":"Linus","points":7}