diff --git a/pkg/schema/field/string.go b/pkg/schema/field/string.go index e741b3e3c653becb6f6417c5d06abab2f68a33e6..97f96daea3345e794ed250c69bff04b25b4c0c13 100644 --- a/pkg/schema/field/string.go +++ b/pkg/schema/field/string.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "reflect" + "strings" ) var stringType = &StringType{} @@ -62,10 +63,21 @@ func (StringType) NonStrictConvert(_ context.Context, _ *Field, v interface{}) i if v == nil { return nil } - if _, ok := v.(string); ok { + + switch v := v.(type) { + case string: return v + case []interface{}: + // Преобразование списка в строку происходит через пробел, + // чтобы сохранить совместимость при обратном преобразовании в список + elems := make([]string, len(v)) + for i, elem := range v { + elems[i] = fmt.Sprintf("%v", elem) + } + return strings.Join(elems, " ") } + // По умолчанию используется стандартное форматирование return fmt.Sprintf("%v", v) } diff --git a/pkg/schema/field/string_test.go b/pkg/schema/field/string_test.go index 38ce350d27b547499739c3e15eebd7cf604471b0..2a1f7be6ca5592c3b32823d95629382da2748c8d 100644 --- a/pkg/schema/field/string_test.go +++ b/pkg/schema/field/string_test.go @@ -49,7 +49,7 @@ func TestStringField_DecodeNonStrict(t *testing.T) { {"Int", String(), 42, "42", false}, {"Float", String(), 3.14, "3.14", false}, {"Bool", String(), true, "true", false}, - {"Array", String(), []interface{}{1, "2"}, "[1 2]", false}, + {"Array", String(), []interface{}{1, "2"}, "1 2", false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {