github.com/traefik/yaegi@v0.15.1/_test/addr4.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "log" 7 ) 8 9 const jsonData = `[ 10 "foo", 11 "bar" 12 ]` 13 14 const jsonData2 = `[ 15 {"foo": "foo"}, 16 {"bar": "bar"} 17 ]` 18 19 const jsonData3 = `{ 20 "foo": "foo", 21 "bar": "bar" 22 }` 23 24 func fromSlice() { 25 var a []interface{} 26 var c, d interface{} 27 c = 2 28 d = 3 29 a = []interface{}{c, d} 30 31 if err := json.Unmarshal([]byte(jsonData), &a); err != nil { 32 log.Fatalln(err) 33 } 34 35 for k, v := range a { 36 fmt.Println(k, ":", v) 37 } 38 } 39 40 func fromEmpty() { 41 var a interface{} 42 var c, d interface{} 43 c = 2 44 d = 3 45 a = []interface{}{c, d} 46 47 if err := json.Unmarshal([]byte(jsonData), &a); err != nil { 48 log.Fatalln(err) 49 } 50 51 b := a.([]interface{}) 52 53 for k, v := range b { 54 fmt.Println(k, ":", v) 55 } 56 } 57 58 func sliceOfObjects() { 59 var a interface{} 60 61 if err := json.Unmarshal([]byte(jsonData2), &a); err != nil { 62 log.Fatalln(err) 63 } 64 65 b := a.([]interface{}) 66 67 for k, v := range b { 68 fmt.Println(k, ":", v) 69 } 70 } 71 72 func intoMap() { 73 var a interface{} 74 75 if err := json.Unmarshal([]byte(jsonData3), &a); err != nil { 76 log.Fatalln(err) 77 } 78 79 b := a.(map[string]interface{}) 80 81 seenFoo := false 82 for k, v := range b { 83 vv := v.(string) 84 if vv != "foo" { 85 if seenFoo { 86 fmt.Println(k, ":", vv) 87 break 88 } 89 kk := k 90 vvv := vv 91 defer fmt.Println(kk, ":", vvv) 92 continue 93 } 94 seenFoo = true 95 fmt.Println(k, ":", vv) 96 } 97 } 98 99 func main() { 100 fromSlice() 101 fromEmpty() 102 sliceOfObjects() 103 intoMap() 104 } 105 106 // Output: 107 // 0 : foo 108 // 1 : bar 109 // 0 : foo 110 // 1 : bar 111 // 0 : map[foo:foo] 112 // 1 : map[bar:bar] 113 // foo : foo 114 // bar : bar