Source file
doc/progs/json1.go
1
2
3
4
5 package main
6
7 import (
8 "encoding/json"
9 "log"
10 "reflect"
11 )
12
13 type Message struct {
14 Name string
15 Body string
16 Time int64
17 }
18
19
20
21 func Encode() {
22 m := Message{"Alice", "Hello", 1294706395881547000}
23 b, err := json.Marshal(m)
24
25 if err != nil {
26 panic(err)
27 }
28
29 expected := []byte(`{"Name":"Alice","Body":"Hello","Time":1294706395881547000}`)
30 if !reflect.DeepEqual(b, expected) {
31 log.Panicf("Error marshaling %q, expected %q, got %q.", m, expected, b)
32 }
33
34 }
35
36 func Decode() {
37 b := []byte(`{"Name":"Alice","Body":"Hello","Time":1294706395881547000}`)
38 var m Message
39 err := json.Unmarshal(b, &m)
40
41 if err != nil {
42 panic(err)
43 }
44
45 expected := Message{
46 Name: "Alice",
47 Body: "Hello",
48 Time: 1294706395881547000,
49 }
50
51 if !reflect.DeepEqual(m, expected) {
52 log.Panicf("Error unmarshaling %q, expected %q, got %q.", b, expected, m)
53 }
54
55 m = Message{
56 Name: "Alice",
57 Body: "Hello",
58 Time: 1294706395881547000,
59 }
60
61
62 }
63
64 func PartialDecode() {
65 b := []byte(`{"Name":"Bob","Food":"Pickle"}`)
66 var m Message
67 err := json.Unmarshal(b, &m)
68
69
70
71 if err != nil {
72 panic(err)
73 }
74
75 expected := Message{
76 Name: "Bob",
77 }
78
79 if !reflect.DeepEqual(expected, m) {
80 log.Panicf("Error unmarshaling %q, expected %q, got %q.", b, expected, m)
81 }
82 }
83
84 func main() {
85 Encode()
86 Decode()
87 PartialDecode()
88 }
89
View as plain text