Skip to content

Commit 10e9a6b

Browse files
committed
output: jsonify when value is slice or map
Fixes #46 - output value as json when the value of key/row is slice or map for nested structures. Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
1 parent 94eeac2 commit 10e9a6b

1 file changed

Lines changed: 18 additions & 8 deletions

File tree

cmd/output.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@ import (
3030
"github.com/olekukonko/tablewriter"
3131
)
3232

33+
func jsonify(value interface{}) string {
34+
if reflect.TypeOf(value).Kind() == reflect.Map || reflect.TypeOf(value).Kind() == reflect.Slice {
35+
jsonStr, err := json.Marshal(value)
36+
if err == nil {
37+
value = string(jsonStr)
38+
}
39+
}
40+
return fmt.Sprintf("%v", value)
41+
}
42+
3343
func printJSON(response map[string]interface{}) {
3444
enc := json.NewEncoder(os.Stdout)
3545
enc.SetEscapeHTML(false)
@@ -46,7 +56,7 @@ func printTable(response map[string]interface{}) {
4656
if !ok {
4757
continue
4858
}
49-
fmt.Printf("%s:\n", k)
59+
fmt.Printf("%v:\n", k)
5060
var header []string
5161
for _, item := range items {
5262
row, ok := item.(map[string]interface{})
@@ -63,12 +73,12 @@ func printTable(response map[string]interface{}) {
6373
}
6474
var rowArray []string
6575
for _, field := range header {
66-
rowArray = append(rowArray, fmt.Sprintf("%v", row[field]))
76+
rowArray = append(rowArray, jsonify(row[field]))
6777
}
6878
table.Append(rowArray)
6979
}
7080
} else {
71-
fmt.Printf("%s = %v\n", k, v)
81+
fmt.Printf("%v = %v\n", k, v)
7282
}
7383
}
7484
table.Render()
@@ -78,22 +88,22 @@ func printText(response map[string]interface{}) {
7888
for k, v := range response {
7989
valueType := reflect.TypeOf(v)
8090
if valueType.Kind() == reflect.Slice {
81-
fmt.Printf("%s:\n", k)
91+
fmt.Printf("%v:\n", k)
8292
for idx, item := range v.([]interface{}) {
8393
if idx > 0 {
8494
fmt.Println("================================================================================")
8595
}
8696
row, isMap := item.(map[string]interface{})
8797
if isMap {
8898
for field, value := range row {
89-
fmt.Printf("%s = %v\n", field, value)
99+
fmt.Printf("%s = %v\n", field, jsonify(value))
90100
}
91101
} else {
92102
fmt.Printf("%v\n", item)
93103
}
94104
}
95105
} else {
96-
fmt.Printf("%s = %v\n", k, v)
106+
fmt.Printf("%v = %v\n", k, jsonify(v))
97107
}
98108
}
99109
}
@@ -123,7 +133,7 @@ func printColumn(response map[string]interface{}) {
123133
}
124134
var values []string
125135
for _, key := range header {
126-
values = append(values, fmt.Sprintf("%v", row[strings.ToLower(key)]))
136+
values = append(values, jsonify(row[strings.ToLower(key)]))
127137
}
128138
fmt.Fprintln(w, strings.Join(values, "\t"))
129139
}
@@ -156,7 +166,7 @@ func printCsv(response map[string]interface{}) {
156166
}
157167
var values []string
158168
for _, key := range header {
159-
values = append(values, fmt.Sprintf("%v", row[key]))
169+
values = append(values, jsonify(row[key]))
160170
}
161171
fmt.Println(strings.Join(values, ","))
162172
}

0 commit comments

Comments
 (0)