| // Copyright 2012 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package main | |
| import ( | |
| "encoding/json" | |
| "log" | |
| "reflect" | |
| ) | |
| type Message struct { | |
| Name string | |
| Body string | |
| Time int64 | |
| } | |
| // STOP OMIT | |
| func Encode() { | |
| m := Message{"Alice", "Hello", 1294706395881547000} | |
| b, err := json.Marshal(m) | |
| if err != nil { | |
| panic(err) | |
| } | |
| expected := []byte(`{"Name":"Alice","Body":"Hello","Time":1294706395881547000}`) | |
| if !reflect.DeepEqual(b, expected) { | |
| log.Panicf("Error marshaling %q, expected %q, got %q.", m, expected, b) | |
| } | |
| } | |
| func Decode() { | |
| b := []byte(`{"Name":"Alice","Body":"Hello","Time":1294706395881547000}`) | |
| var m Message | |
| err := json.Unmarshal(b, &m) | |
| if err != nil { | |
| panic(err) | |
| } | |
| expected := Message{ | |
| Name: "Alice", | |
| Body: "Hello", | |
| Time: 1294706395881547000, | |
| } | |
| if !reflect.DeepEqual(m, expected) { | |
| log.Panicf("Error unmarshaling %q, expected %q, got %q.", b, expected, m) | |
| } | |
| m = Message{ | |
| Name: "Alice", | |
| Body: "Hello", | |
| Time: 1294706395881547000, | |
| } | |
| // STOP OMIT | |
| } | |
| func PartialDecode() { | |
| b := []byte(`{"Name":"Bob","Food":"Pickle"}`) | |
| var m Message | |
| err := json.Unmarshal(b, &m) | |
| // STOP OMIT | |
| if err != nil { | |
| panic(err) | |
| } | |
| expected := Message{ | |
| Name: "Bob", | |
| } | |
| if !reflect.DeepEqual(expected, m) { | |
| log.Panicf("Error unmarshaling %q, expected %q, got %q.", b, expected, m) | |
| } | |
| } | |
| func main() { | |
| Encode() | |
| Decode() | |
| PartialDecode() | |
| } |