// 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"
	"fmt"
	"log"
	"reflect"
)

func Decode() {
	b := []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`)

	var f interface{}
	err := json.Unmarshal(b, &f)

	// STOP OMIT

	if err != nil {
		panic(err)
	}

	expected := map[string]interface{}{
		"Name": "Wednesday",
		"Age":  float64(6),
		"Parents": []interface{}{
			"Gomez",
			"Morticia",
		},
	}

	if !reflect.DeepEqual(f, expected) {
		log.Panicf("Error unmarshaling %q, expected %q, got %q", b, expected, f)
	}

	f = map[string]interface{}{
		"Name": "Wednesday",
		"Age":  6,
		"Parents": []interface{}{
			"Gomez",
			"Morticia",
		},
	}

	// STOP OMIT

	m := f.(map[string]interface{})

	for k, v := range m {
		switch vv := v.(type) {
		case string:
			fmt.Println(k, "is string", vv)
		case int:
			fmt.Println(k, "is int", vv)
		case []interface{}:
			fmt.Println(k, "is an array:")
			for i, u := range vv {
				fmt.Println(i, u)
			}
		default:
			fmt.Println(k, "is of a type I don't know how to handle")
		}
	}

	// STOP OMIT
}

func main() {
	Decode()
}
