diff --git a/type_specific.go b/type_specific.go index 0dbe062..dcfbc9a 100644 --- a/type_specific.go +++ b/type_specific.go @@ -224,6 +224,9 @@ func (v *Value) ObjxMapSlice(optionalDefault ...[]Map) []Map { case map[string]any: result[i] = New(s[i]) default: + if len(optionalDefault) == 1 { + return optionalDefault[0] + } return nil } } diff --git a/type_specific_test.go b/type_specific_test.go index b3ca0b5..f450fbe 100644 --- a/type_specific_test.go +++ b/type_specific_test.go @@ -456,3 +456,19 @@ func TestCollectObjxMap2(t *testing.T) { assert.Equal(t, collectedArr[4], 4) } } + +func TestObjxMapSliceDefaultFromJSON(t *testing.T) { + m := objx.MustFromJSON(`{"rows":[{"id":1},false]}`) + fallback := []objx.Map{{"fallback": true}} + + assert.Equal(t, fallback, m.Get("rows").ObjxMapSlice(fallback)) +} + +func TestObjxMapSliceInvalidElementDefaults(t *testing.T) { + fallback := []objx.Map{{"fallback": true}} + for _, invalid := range []any{nil, "not a map"} { + value := objx.Map{"rows": []any{invalid}}.Get("rows") + assert.Equal(t, fallback, value.ObjxMapSlice(fallback)) + assert.Nil(t, value.ObjxMapSlice()) + } +}