Tôi muốn deserialise một đối tượng trong đó bao gồm một mảng của một số giao diện Entity
:unmarshal một mảng JSON của cấu trúc không đồng nhất
type Result struct {
Foo int;
Bar []Entity;
};
Entity
là một giao diện được thực hiện bởi một số loại struct. Dữ liệu JSON xác định loại cấu trúc có trường "loại" trong mỗi thực thể. Ví dụ.
{"type":"t1","field1":1}
{"type":"t2","field2":2,"field3":3}
Tôi làm cách nào để loại bỏ một cách chính xác. Từ những gì tôi có thể thấy, tôi phải:
- Thực hiện
UnmarshalJSON
trênResult
. - Phân tích cú pháp
Bar
dưới dạng[]*json.RawMessage
. - Phân tích cú pháp mỗi thư thô dưới dạng
map[string]interface{}
. - Kiểm tra trường "loại" trong thư thô.
- Tạo cấu trúc loại thích hợp.
- Phân tích cú pháp thư thô lần nữa, lần này vào cấu trúc vừa tạo.
Điều này nghe có vẻ rất tẻ nhạt và nhàm chán. Có cách nào tốt hơn để làm điều này? Hay tôi đang làm ngược lại, và có một phương pháp kinh điển hơn để xử lý một mảng các đối tượng không đồng nhất?
Tôi đã kết thúc với cấu trúc "công đoàn". Nó cảm thấy bẩn thỉu, nhưng cuối cùng cũng được giải phóng. –