| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- 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)
- }
- }
|