aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/encoding
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2013-10-03 08:52:18 +1000
committerAndrew Gerrand <adg@golang.org>2013-10-03 08:52:18 +1000
commit0857045818d7cd31edfa54dec2c2b88af665c87c (patch)
treebb4781c581765604b883bfbd3739add13577b4e6 /src/pkg/encoding
parentd38ed2a9f224dbc79adbed4fe49fe2aef137bf5b (diff)
downloadgo-0857045818d7cd31edfa54dec2c2b88af665c87c.tar.xz
encoding/json: add an example for RawMessage
RawMessage is useful and mildly non-obvious. Given the frequency with which RawMessage questions show up on golang-nuts, and get answered with an example, I suspect adding an example to the docs might help. R=golang-dev, adg CC=golang-dev https://golang.org/cl/14190044
Diffstat (limited to 'src/pkg/encoding')
-rw-r--r--src/pkg/encoding/json/example_test.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/pkg/encoding/json/example_test.go b/src/pkg/encoding/json/example_test.go
index b8d150eda5..ea0bc149c3 100644
--- a/src/pkg/encoding/json/example_test.go
+++ b/src/pkg/encoding/json/example_test.go
@@ -81,3 +81,49 @@ func ExampleDecoder() {
// Sam: Go fmt who?
// Ed: Go fmt yourself!
}
+
+// This example uses RawMessage to delay parsing part of a JSON message.
+func ExampleRawMessage() {
+ type Color struct {
+ Space string
+ Point json.RawMessage // delay parsing until we know the color space
+ }
+ type RGB struct {
+ R uint8
+ G uint8
+ B uint8
+ }
+ type YCbCr struct {
+ Y uint8
+ Cb int8
+ Cr int8
+ }
+
+ var j = []byte(`[
+ {"Space": "YCbCr", "Point": {"Y": 255, "Cb": 0, "Cr": -10}},
+ {"Space": "RGB", "Point": {"R": 98, "G": 218, "B": 255}}
+ ]`)
+ var colors []Color
+ err := json.Unmarshal(j, &colors)
+ if err != nil {
+ log.Fatalln("error:", err)
+ }
+
+ for _, c := range colors {
+ var dst interface{}
+ switch c.Space {
+ case "RGB":
+ dst = new(RGB)
+ case "YCbCr":
+ dst = new(YCbCr)
+ }
+ err := json.Unmarshal(c.Point, dst)
+ if err != nil {
+ log.Fatalln("error:", err)
+ }
+ fmt.Println(c.Space, dst)
+ }
+ // Output:
+ // YCbCr &{255 0 -10}
+ // RGB &{98 218 255}
+}