Вы можете использовать структуру для внутреннего объекта:
type InnerObj struct {
Tag string `json:"tag"`
ContainerID string `json:"container_id"`
ContainerName string `json:"container_name"`
Source string `json:"stdout"`
Log string `json:"log"`
}
Остальное, вы не можете сделать, используя структуры.
Чтобы сгенерировать, вы можете построить дерево с использованием массивов, например:
[]interface{} { []interface{} {1580946420.000000,InnerObj{...}},
{1580946423.000000, InnerObj{...}}}
С помощью разбора это не так просто, используя структуры. У вас есть несколько вариантов:
- Разобрать на
interface{}
и работать над ним - Использовать многопроходный подход
Многопроход проще в реализации:
var arr [][]json.RawMessage
json.Unmarshal(data,&arr)
Это должно дать вам каждый внутренний массив в виде двумерного необработанного json сообщения. Затем вы можете использовать декодер для работы с каждым:
for _,arr1:=range arr {
for _,arr2:=range arr1 {
var data InnerObj
var number float64
dec:=json.NewDecoder(bytes.NewReader(msg))
if msg[0]=='{' {
dec.Decode(&data)
} else {
dec.Decode(&number)
}
}
}
Вы, конечно, можете использовать Decoder
полностью и также проанализировать файл самостоятельно.