mirror of
https://github.com/mikefarah/yq.git
synced 2024-11-13 22:38:04 +00:00
Bugfix: Panic on non-string keys
Adds check if the key is an `int` or `bool`, and converts to a string as part of the `toJSON` function. Test cases added. Resolves: #28
This commit is contained in:
parent
1ed8e7017e
commit
3beee3f804
@ -2,7 +2,9 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"gopkg.in/yaml.v2"
|
"strconv"
|
||||||
|
|
||||||
|
yaml "gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func jsonToString(context interface{}) string {
|
func jsonToString(context interface{}) string {
|
||||||
@ -26,7 +28,13 @@ func toJSON(context interface{}) interface{} {
|
|||||||
oldMap := context.(yaml.MapSlice)
|
oldMap := context.(yaml.MapSlice)
|
||||||
newMap := make(map[string]interface{})
|
newMap := make(map[string]interface{})
|
||||||
for _, entry := range oldMap {
|
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
|
return newMap
|
||||||
default:
|
default:
|
||||||
|
@ -13,6 +13,24 @@ b:
|
|||||||
assertResult(t, "{\"b\":{\"c\":2}}", jsonToString(data))
|
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) {
|
func TestJsonToString_withArray(t *testing.T) {
|
||||||
var data = parseData(`
|
var data = parseData(`
|
||||||
---
|
---
|
||||||
|
Loading…
Reference in New Issue
Block a user