1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| package main
import ( "encoding/json" "fmt" )
func main() { m := map[string]interface{}{}
err := json.Unmarshal([]byte(input), &m)
if err != nil { panic(err) } parseMap(m) }
func parseMap(aMap map[string]interface{}) { for key, val := range aMap { switch concreteVal := val.(type) { case map[string]interface{}: fmt.Println(key) parseMap(val.(map[string]interface{})) case []interface{}: fmt.Println(key) parseArray(val.([]interface{})) default: fmt.Println(key, ":", concreteVal) } } }
func parseArray(anArray []interface{}) { for i, val := range anArray { switch concreteVal := val.(type) { case map[string]interface{}: fmt.Println("Index:", i) parseMap(val.(map[string]interface{})) case []interface{}: fmt.Println("Index:", i) parseArray(val.([]interface{})) default: fmt.Println("Index", i, ":", concreteVal)
} } }
const input = ` { "data": [ { "domain": "ni.suock.com", "method": "GET", "data": "empty data", "path": "/node/clientnodelist", "reply": "reply data1", "base64reply": "reply data2" }, { "domain": "hi.nihao.com", "method": "POST", "data": "", "path": "/base/captcha", "reply": "reply data1", "base64reply": "" } ] } `
|