json1.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Copyright 2012 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package main
  5. import (
  6. "encoding/json"
  7. "log"
  8. "reflect"
  9. )
  10. type Message struct {
  11. Name string
  12. Body string
  13. Time int64
  14. }
  15. // STOP OMIT
  16. func Encode() {
  17. m := Message{"Alice", "Hello", 1294706395881547000}
  18. b, err := json.Marshal(m)
  19. if err != nil {
  20. panic(err)
  21. }
  22. expected := []byte(`{"Name":"Alice","Body":"Hello","Time":1294706395881547000}`)
  23. if !reflect.DeepEqual(b, expected) {
  24. log.Panicf("Error marshaling %q, expected %q, got %q.", m, expected, b)
  25. }
  26. }
  27. func Decode() {
  28. b := []byte(`{"Name":"Alice","Body":"Hello","Time":1294706395881547000}`)
  29. var m Message
  30. err := json.Unmarshal(b, &m)
  31. if err != nil {
  32. panic(err)
  33. }
  34. expected := Message{
  35. Name: "Alice",
  36. Body: "Hello",
  37. Time: 1294706395881547000,
  38. }
  39. if !reflect.DeepEqual(m, expected) {
  40. log.Panicf("Error unmarshaling %q, expected %q, got %q.", b, expected, m)
  41. }
  42. m = Message{
  43. Name: "Alice",
  44. Body: "Hello",
  45. Time: 1294706395881547000,
  46. }
  47. // STOP OMIT
  48. }
  49. func PartialDecode() {
  50. b := []byte(`{"Name":"Bob","Food":"Pickle"}`)
  51. var m Message
  52. err := json.Unmarshal(b, &m)
  53. // STOP OMIT
  54. if err != nil {
  55. panic(err)
  56. }
  57. expected := Message{
  58. Name: "Bob",
  59. }
  60. if !reflect.DeepEqual(expected, m) {
  61. log.Panicf("Error unmarshaling %q, expected %q, got %q.", b, expected, m)
  62. }
  63. }
  64. func main() {
  65. Encode()
  66. Decode()
  67. PartialDecode()
  68. }