diff --git a/json_converter.go b/json_converter.go index cc48cf78..aaa46e2f 100644 --- a/json_converter.go +++ b/json_converter.go @@ -2,7 +2,7 @@ package main import ( "encoding/json" - + "strconv" yaml "gopkg.in/yaml.v2" ) @@ -27,7 +27,13 @@ func toJSON(context interface{}) interface{} { oldMap := context.(yaml.MapSlice) newMap := make(map[string]interface{}) for _, entry := range oldMap { - newMap[entry.Key.(string)] = toJSON(entry.Value) + 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) + } } return newMap default: diff --git a/json_converter_test.go b/json_converter_test.go index 0a1adfb2..102066be 100644 --- a/json_converter_test.go +++ b/json_converter_test.go @@ -13,6 +13,24 @@ b: assertResult(t, "{\"b\":{\"c\":2}}", jsonToString(data)) } +func TestJsonToString_withIntKey(t *testing.T) { + var data = parseData(` +--- +b: + 2: c +`) + assertResult(t, `{"b":{"2":"c"}}`, jsonToString(data)) +} + +func TestJsonToString_withBoolKey(t *testing.T) { + var data = parseData(` +--- +b: + false: c +`) + assertResult(t, `{"b":{"false":"c"}}`, jsonToString(data)) +} + func TestJsonToString_withArray(t *testing.T) { var data = parseData(` ---