package main import ( "encoding/json" "fmt" "io" "os" ) type Student struct { LastName string FirstName string MiddleName string Birthday string Address string Phone string Rating []int } type Group struct { ID int Number string Year int Students []Student } func main() { // readJsonFromVar() // readJsonFromFile() readJsonFromStdin() } func readJsonFromStdin() { var group Group var markCount, studentCount int data, err := io.ReadAll(os.Stdin) if err != nil { fmt.Println("Ошибка чтения") } if err := json.Unmarshal(data, &group); err != nil { fmt.Println(err) } for _, val := range group.Students { // for _, _ := range val.Rating { markCount += len(val.Rating) studentCount++ } type Avr struct { Average float32 } avr := Avr{float32(markCount) / float32(studentCount)} jsonData, err := json.MarshalIndent(avr, "", " ") io.WriteString(os.Stdout, string(jsonData)) } func readJsonFromFile() { file, err := os.Open("json_data.json") if err != nil { fmt.Printf("Ошибка открытия файла: %v\n", err) } defer func() { if err := file.Close(); err != nil { fmt.Printf("Ошибка закрытия файла %v\n", err) } else { fmt.Println("Файл закрыт") } }() fileBytes, err := io.ReadAll(file) if err != nil { fmt.Printf("Ошибка чтения файла: %v\n", err) } var group Group if err := json.Unmarshal(fileBytes, &group); err != nil { fmt.Println(err) } var count, sum int for _, val := range group.Students { for _, mark := range val.Rating { count++ sum += mark } } // avr := fmt.Sprintf("%.1f", float32(sum)/float32(count)) // avr := float32(sum)/float32(count) // var avr float32 = 12.3 // var jsonData []byte type jd struct { Average float32 } jD := jd{15.43} jsonData, err := json.MarshalIndent(jD, "", " ") /* if jsonData, err := json.Marshal(avr); err != nil { fmt.Printf("Что-то пошло не так") } */ fmt.Println(jsonData) fmt.Println(string(jsonData)) // fmt.Println(avr) // fmt.Println(float32(sum) / float32(count)) } // Создали тестовый массив байт в виде JSON и // распарсили его в структуру. func readJsonFromVar() { testInput := []byte(`{ "ID": 134, "Number": "ИЛМ-1274", "Year": 2}`) var group Group if err := json.Unmarshal(testInput, &group); err != nil { fmt.Println(err) } else { fmt.Println(group.ID, group.Number, group.Year) } }