@@ -62,30 +62,30 @@ 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 {
65
+ func getItemsFromValue (v interface {}) ([]interface {}, reflect. Kind , bool ) {
66
+ valueKind := reflect .TypeOf (v ). Kind ( )
67
+ if valueKind == reflect .Slice {
68
68
sliceItems , ok := v .([]interface {})
69
69
if ! ok {
70
- return nil , false
70
+ return nil , valueKind , false
71
71
}
72
- return sliceItems , true
73
- } else if valueType . Kind () == reflect .Map {
72
+ return sliceItems , valueKind , true
73
+ } else if valueKind == reflect .Map {
74
74
mapItem , ok := v .(map [string ]interface {})
75
75
if ! ok {
76
- return nil , false
76
+ return nil , valueKind , false
77
77
}
78
- return []interface {}{mapItem }, true
78
+ return []interface {}{mapItem }, valueKind , true
79
79
}
80
- return nil , false
80
+ return nil , valueKind , false
81
81
}
82
82
83
83
func printText (response map [string ]interface {}) {
84
84
format := "text"
85
85
for k , v := range response {
86
86
valueType := reflect .TypeOf (v )
87
87
if valueType .Kind () == reflect .Slice || valueType .Kind () == reflect .Map {
88
- items , ok := getItemsFromValue (v )
88
+ items , _ , ok := getItemsFromValue (v )
89
89
if ok {
90
90
fmt .Printf ("%v:\n " , k )
91
91
for idx , item := range items {
@@ -114,7 +114,7 @@ func printTable(response map[string]interface{}, filter []string) {
114
114
for k , v := range response {
115
115
valueType := reflect .TypeOf (v )
116
116
if valueType .Kind () == reflect .Slice || valueType .Kind () == reflect .Map {
117
- items , ok := getItemsFromValue (v )
117
+ items , _ , ok := getItemsFromValue (v )
118
118
if ! ok {
119
119
continue
120
120
}
@@ -155,7 +155,7 @@ func printColumn(response map[string]interface{}, filter []string) {
155
155
for _ , v := range response {
156
156
valueType := reflect .TypeOf (v )
157
157
if valueType .Kind () == reflect .Slice || valueType .Kind () == reflect .Map {
158
- items , ok := getItemsFromValue (v )
158
+ items , _ , ok := getItemsFromValue (v )
159
159
if ! ok {
160
160
continue
161
161
}
@@ -194,7 +194,7 @@ func printCsv(response map[string]interface{}, filter []string) {
194
194
for _ , v := range response {
195
195
valueType := reflect .TypeOf (v )
196
196
if valueType .Kind () == reflect .Slice || valueType .Kind () == reflect .Map {
197
- items , ok := getItemsFromValue (v )
197
+ items , _ , ok := getItemsFromValue (v )
198
198
if ! ok {
199
199
continue
200
200
}
@@ -247,7 +247,7 @@ func filterResponse(response map[string]interface{}, filter []string, excludeFil
247
247
for key , value := range response {
248
248
valueType := reflect .TypeOf (value )
249
249
if valueType .Kind () == reflect .Slice || valueType .Kind () == reflect .Map {
250
- items , ok := getItemsFromValue (value )
250
+ items , originalKind , ok := getItemsFromValue (value )
251
251
if ! ok {
252
252
continue
253
253
}
@@ -280,7 +280,11 @@ func filterResponse(response map[string]interface{}, filter []string, excludeFil
280
280
281
281
filteredRows = append (filteredRows , filteredRow )
282
282
}
283
- filteredResponse [key ] = filteredRows
283
+ if originalKind == reflect .Map && len (filteredRows ) > 0 {
284
+ filteredResponse [key ] = filteredRows [0 ]
285
+ } else {
286
+ filteredResponse [key ] = filteredRows
287
+ }
284
288
} else {
285
289
filteredResponse [key ] = value
286
290
}
0 commit comments