Skip to content

Instantly share code, notes, and snippets.

@Vostbur
Created December 16, 2022 17:10
Show Gist options
  • Save Vostbur/ed72d3841011d50e9245359bf0f73420 to your computer and use it in GitHub Desktop.
Save Vostbur/ed72d3841011d50e9245359bf0f73420 to your computer and use it in GitHub Desktop.
Stepic. Golang. Work_with_json_2

На стандартный ввод подаются данные о студентах университетской группы в формате JSON:

{
    "ID":134,
    "Number":"ИЛМ-1274",
    "Year":2,
    "Students":[
        {
            "LastName":"Вещий",
            "FirstName":"Лифон",
            "MiddleName":"Вениаминович",
            "Birthday":"4апреля1970года",
            "Address":"632432,г.Тобольск,ул.Киевская,дом6,квартира23",
            "Phone":"+7(948)709-47-24",
            "Rating":[1,2,3]
        },
        {
            // ...
        }
    ]
}

В сведениях о каждом студенте содержится информация о полученных им оценках (Rating). Требуется прочитать данные, и рассчитать среднее количество оценок, полученное студентами группы. Ответ на задачу требуется записать на стандартный вывод в формате JSON в следующей форме:

{
    "Average": 14.1
}

Как вы понимаете, для декодирования используется функция Unmarshal, а для кодирования MarshalIndent (префикс - пустая строка, отступ - 4 пробела).

Запуск из командной строки: cat test.json | go run main.go

package main
import (
"encoding/json"
"os"
)
func main() {
type (
Student struct {
Rating []int
}
Group struct {
Students []Student
}
Rating struct {
Average float32
}
)
var studs = Group{}
json.NewDecoder(os.Stdin).Decode(&studs)
var r int
for _, s := range studs.Students {
r += len(s.Rating)
}
var a = Rating{}
a.Average = float32(r) / float32(len(studs.Students))
dataOut, _ := json.MarshalIndent(a, "", " ")
os.Stdout.Write(dataOut)
}
{
"ID":134,
"Number":"ИЛМ-1274",
"Year":2,
"Students":[
{
"LastName":"Вещий",
"FirstName":"Лифон",
"MiddleName":"Вениаминович",
"Birthday":"4апреля1970года",
"Address":"632432,г.Тобольск,ул.Киевская,дом6,квартира23",
"Phone":"+7(948)709-47-24",
"Rating":[1,2,3]
},
{
"LastName":"Ien",
"FirstName":"ccc",
"MiddleName":"Вениаминович",
"Birthday":"4апреля1970года",
"Address":"632432,г.Тобольск,ул.Киевская,дом6,квартира23",
"Phone":"+7(948)709-47-24",
"Rating":[4,5,6]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment