github.com/traefik/yaegi@v0.15.1/_test/addr5.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "net/url" 7 ) 8 9 func main() { 10 body := []byte(`{ 11 "BODY_1": "VALUE_1", 12 "BODY_2": "VALUE_2", 13 "BODY_3": null, 14 "BODY_4": { 15 "BODY_1": "VALUE_1", 16 "BODY_2": "VALUE_2", 17 "BODY_3": null 18 }, 19 "BODY_5": [ 20 "VALUE_1", 21 "VALUE_2", 22 "VALUE_3" 23 ] 24 }`) 25 26 values := url.Values{} 27 28 var rawData map[string]interface{} 29 err := json.Unmarshal(body, &rawData) 30 if err != nil { 31 fmt.Println("can't parse body") 32 return 33 } 34 35 for key, val := range rawData { 36 switch val.(type) { 37 case string, bool, float64: 38 values.Add(key, fmt.Sprint(val)) 39 case nil: 40 values.Add(key, "") 41 case map[string]interface{}, []interface{}: 42 jsonVal, err := json.Marshal(val) 43 if err != nil { 44 fmt.Println("can't encode json") 45 return 46 } 47 values.Add(key, string(jsonVal)) 48 } 49 } 50 fmt.Println(values.Get("BODY_1")) 51 fmt.Println(values.Get("BODY_2")) 52 fmt.Println(values.Get("BODY_3")) 53 fmt.Println(values.Get("BODY_4")) 54 fmt.Println(values.Get("BODY_5")) 55 } 56 57 // Output: 58 // VALUE_1 59 // VALUE_2 60 // 61 // {"BODY_1":"VALUE_1","BODY_2":"VALUE_2","BODY_3":null} 62 // ["VALUE_1","VALUE_2","VALUE_3"]