|  | // 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() | 
|  | } |