json_task.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io"
  6. "os"
  7. )
  8. type Student struct {
  9. LastName string
  10. FirstName string
  11. MiddleName string
  12. Birthday string
  13. Address string
  14. Phone string
  15. Rating []int
  16. }
  17. type Group struct {
  18. ID int
  19. Number string
  20. Year int
  21. Students []Student
  22. }
  23. func main() {
  24. // readJsonFromVar()
  25. // readJsonFromFile()
  26. readJsonFromStdin()
  27. }
  28. func readJsonFromStdin() {
  29. var group Group
  30. var markCount, studentCount int
  31. data, err := io.ReadAll(os.Stdin)
  32. if err != nil {
  33. fmt.Println("Ошибка чтения")
  34. }
  35. if err := json.Unmarshal(data, &group); err != nil {
  36. fmt.Println(err)
  37. }
  38. for _, val := range group.Students {
  39. // for _, _ := range val.Rating {
  40. markCount += len(val.Rating)
  41. studentCount++
  42. }
  43. type Avr struct {
  44. Average float32
  45. }
  46. avr := Avr{float32(markCount) / float32(studentCount)}
  47. jsonData, err := json.MarshalIndent(avr, "", " ")
  48. io.WriteString(os.Stdout, string(jsonData))
  49. }
  50. func readJsonFromFile() {
  51. file, err := os.Open("json_data.json")
  52. if err != nil {
  53. fmt.Printf("Ошибка открытия файла: %v\n", err)
  54. }
  55. defer func() {
  56. if err := file.Close(); err != nil {
  57. fmt.Printf("Ошибка закрытия файла %v\n", err)
  58. } else {
  59. fmt.Println("Файл закрыт")
  60. }
  61. }()
  62. fileBytes, err := io.ReadAll(file)
  63. if err != nil {
  64. fmt.Printf("Ошибка чтения файла: %v\n", err)
  65. }
  66. var group Group
  67. if err := json.Unmarshal(fileBytes, &group); err != nil {
  68. fmt.Println(err)
  69. }
  70. var count, sum int
  71. for _, val := range group.Students {
  72. for _, mark := range val.Rating {
  73. count++
  74. sum += mark
  75. }
  76. }
  77. // avr := fmt.Sprintf("%.1f", float32(sum)/float32(count))
  78. // avr := float32(sum)/float32(count)
  79. // var avr float32 = 12.3
  80. // var jsonData []byte
  81. type jd struct {
  82. Average float32
  83. }
  84. jD := jd{15.43}
  85. jsonData, err := json.MarshalIndent(jD, "", " ")
  86. /*
  87. if jsonData, err := json.Marshal(avr); err != nil {
  88. fmt.Printf("Что-то пошло не так")
  89. }
  90. */
  91. fmt.Println(jsonData)
  92. fmt.Println(string(jsonData))
  93. // fmt.Println(avr)
  94. // fmt.Println(float32(sum) / float32(count))
  95. }
  96. // Создали тестовый массив байт в виде JSON и
  97. // распарсили его в структуру.
  98. func readJsonFromVar() {
  99. testInput := []byte(`{
  100. "ID": 134,
  101. "Number": "ИЛМ-1274",
  102. "Year": 2}`)
  103. var group Group
  104. if err := json.Unmarshal(testInput, &group); err != nil {
  105. fmt.Println(err)
  106. } else {
  107. fmt.Println(group.ID, group.Number, group.Year)
  108. }
  109. }