yq/json_converter.go

43 lines
996 B
Go
Raw Normal View History

2015-10-10 23:00:22 +00:00
package main
import (
"encoding/json"
"strconv"
yaml "gopkg.in/yaml.v2"
2015-10-10 23:00:22 +00:00
)
func jsonToString(context interface{}) string {
out, err := json.Marshal(toJSON(context))
if err != nil {
die("error printing yaml as json: ", err)
}
return string(out)
}
func toJSON(context interface{}) interface{} {
switch context.(type) {
case []interface{}:
oldArray := context.([]interface{})
newArray := make([]interface{}, len(oldArray))
for index, value := range oldArray {
newArray[index] = toJSON(value)
}
return newArray
2017-02-26 22:01:52 +00:00
case yaml.MapSlice:
oldMap := context.(yaml.MapSlice)
2015-10-10 23:00:22 +00:00
newMap := make(map[string]interface{})
2017-02-26 22:01:52 +00:00
for _, entry := range oldMap {
if str, ok := entry.Key.(string); ok {
newMap[str] = toJSON(entry.Value)
} else if i, ok := entry.Key.(int); ok {
newMap[strconv.Itoa(i)] = toJSON(entry.Value)
} else if b, ok := entry.Key.(bool); ok {
newMap[strconv.FormatBool(b)] = toJSON(entry.Value)
}
2015-10-10 23:00:22 +00:00
}
return newMap
default:
return context
}
}