В Go нет общей поддержки (пока), поэтому вы не можете создать массив, который бы представлял различные типы значений из вашего JSON.
Один из способов - использовать фрагмент типа []interface{}
и пакет encoding/json
сам выберет типы для разбора, которые будут map[string]interface{}
для объектов JSON.
Вы можете смоделировать внешний объект с этим типом:
type Obj struct {
OneOfArray []interface{} `json:"oneOfArray"`
}
Пример демаршалирования вашего ввода:
src := `{"oneOfArray": ["str1", "str2", {"SomeStruct": "value3"}, "str4", {"SomeStruct": "value5"} ]}`
var obj Obj
if err := json.Unmarshal([]byte(src), &obj); err != nil {
panic(err)
}
fmt.Println(obj)
Вывод (попробуйте на Go Playground ):
{[str1 str2 map[SomeStruct:value3] str4 map[SomeStruct:value5]]}