package main import ( "fmt" ) func stringify(v interface{}) string { switch v.(type) { case nil: return "null" case bool: if v.(bool) { return "true" } else { return "false" } case number: return v.(number).String() case string: return fmt.Sprintf("%q", v) case *dict: result := "{" for i, key := range v.(*dict).keys { line := fmt.Sprintf("%q", key) + ": " + stringify(v.(*dict).values[key]) if i < len(v.(*dict).keys)-1 { line += ", " } result += line } return result + "}" case array: result := "[" for i, value := range v.(array) { line := stringify(value) if i < len(v.(array))-1 { line += ", " } result += line } return result + "]" default: return "unknown type" } }