Десериализация массива Json структур "oneOf" - PullRequest
0 голосов
/ 31 января 2019

У меня есть документы JSON, которые содержат массив, в котором каждый элемент является либо строкой, либо картой, представляющей объект.

{"oneOfArray": ["str1", "str2", {"SomeStruct": "value3"}, "str4", {"SomeStruct": "value5"} ]}

Как создать классы Go, которые представляют такую ​​структуру и обеспечивают десериализацию с помощьюjson пакет?

1 Ответ

0 голосов
/ 31 января 2019

В 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]]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...