@@ -62,28 +62,49 @@ func printJSON(response map[string]interface{}) {
62
62
enc .Encode (response )
63
63
}
64
64
65
+ func getItemsFromValue (v interface {}) ([]interface {}, bool ) {
66
+ valueType := reflect .TypeOf (v )
67
+ if valueType .Kind () == reflect .Slice {
68
+ sliceItems , ok := v .([]interface {})
69
+ if ! ok {
70
+ return nil , false
71
+ }
72
+ return sliceItems , true
73
+ } else if valueType .Kind () == reflect .Map {
74
+ mapItem , ok := v .(map [string ]interface {})
75
+ if ! ok {
76
+ return nil , false
77
+ }
78
+ return []interface {}{mapItem }, true
79
+ }
80
+ return nil , false
81
+ }
82
+
65
83
func printText (response map [string ]interface {}) {
66
84
format := "text"
67
85
for k , v := range response {
68
86
valueType := reflect .TypeOf (v )
69
- if valueType .Kind () == reflect .Slice {
70
- fmt .Printf ("%v:\n " , k )
71
- for idx , item := range v .([]interface {}) {
72
- if idx > 0 {
73
- fmt .Println ("================================================================================" )
74
- }
75
- row , isMap := item .(map [string ]interface {})
76
- if isMap {
77
- for field , value := range row {
78
- fmt .Printf ("%s = %v\n " , field , jsonify (value , format ))
87
+ if valueType .Kind () == reflect .Slice || valueType .Kind () == reflect .Map {
88
+ items , ok := getItemsFromValue (v )
89
+ if ok {
90
+ fmt .Printf ("%v:\n " , k )
91
+ for idx , item := range items {
92
+ if idx > 0 {
93
+ fmt .Println ("================================================================================" )
94
+ }
95
+ row , isMap := item .(map [string ]interface {})
96
+ if isMap {
97
+ for field , value := range row {
98
+ fmt .Printf ("%s = %v\n " , field , jsonify (value , format ))
99
+ }
100
+ } else {
101
+ fmt .Printf ("%v\n " , item )
79
102
}
80
- } else {
81
- fmt .Printf ("%v\n " , item )
82
103
}
104
+ return
83
105
}
84
- } else {
85
- fmt .Printf ("%v = %v\n " , k , jsonify (v , format ))
86
106
}
107
+ fmt .Printf ("%v = %v\n " , k , jsonify (v , format ))
87
108
}
88
109
}
89
110
@@ -92,8 +113,8 @@ func printTable(response map[string]interface{}, filter []string) {
92
113
table := tablewriter .NewWriter (os .Stdout )
93
114
for k , v := range response {
94
115
valueType := reflect .TypeOf (v )
95
- if valueType .Kind () == reflect .Slice {
96
- items , ok := v .([] interface {} )
116
+ if valueType .Kind () == reflect .Slice || valueType . Kind () == reflect . Map {
117
+ items , ok := getItemsFromValue ( v )
97
118
if ! ok {
98
119
continue
99
120
}
@@ -134,7 +155,7 @@ func printColumn(response map[string]interface{}, filter []string) {
134
155
for _ , v := range response {
135
156
valueType := reflect .TypeOf (v )
136
157
if valueType .Kind () == reflect .Slice || valueType .Kind () == reflect .Map {
137
- items , ok := v .([] interface {} )
158
+ items , ok := getItemsFromValue ( v )
138
159
if ! ok {
139
160
continue
140
161
}
@@ -173,7 +194,7 @@ func printCsv(response map[string]interface{}, filter []string) {
173
194
for _ , v := range response {
174
195
valueType := reflect .TypeOf (v )
175
196
if valueType .Kind () == reflect .Slice || valueType .Kind () == reflect .Map {
176
- items , ok := v .([] interface {} )
197
+ items , ok := getItemsFromValue ( v )
177
198
if ! ok {
178
199
continue
179
200
}
@@ -207,7 +228,7 @@ func printCsv(response map[string]interface{}, filter []string) {
207
228
}
208
229
209
230
func filterResponse (response map [string ]interface {}, filter []string , excludeFilter []string , outputType string ) map [string ]interface {} {
210
- if ( filter == nil || len (filter ) == 0 ) && ( excludeFilter == nil || len (excludeFilter ) == 0 ) {
231
+ if len (filter ) == 0 && len (excludeFilter ) == 0 {
211
232
return response
212
233
}
213
234
@@ -224,8 +245,12 @@ func filterResponse(response map[string]interface{}, filter []string, excludeFil
224
245
filteredResponse := make (map [string ]interface {})
225
246
226
247
for key , value := range response {
227
- switch items := value .(type ) {
228
- case []interface {}:
248
+ valueType := reflect .TypeOf (value )
249
+ if valueType .Kind () == reflect .Slice || valueType .Kind () == reflect .Map {
250
+ items , ok := getItemsFromValue (value )
251
+ if ! ok {
252
+ continue
253
+ }
229
254
var filteredRows []interface {}
230
255
for _ , item := range items {
231
256
row , ok := item .(map [string ]interface {})
@@ -256,8 +281,7 @@ func filterResponse(response map[string]interface{}, filter []string, excludeFil
256
281
filteredRows = append (filteredRows , filteredRow )
257
282
}
258
283
filteredResponse [key ] = filteredRows
259
-
260
- default :
284
+ } else {
261
285
filteredResponse [key ] = value
262
286
}
263
287
}
0 commit comments