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