Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 0
Регистрация: 03.05.2017
Сообщений: 163

Открыть json afqk

30.07.2022, 23:26. Показов 2315. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, в файле json лежит массив обьектов, в обьектов есть поле с временем, используется пакет time. Нужно вивести обьекты по заданому критерию но для начала хочу просто ввести их, выводит вот такое
2022/07/30 22:30:42 parsing time ""00:50:00"" as ""2006-01-02T15:04:05Z07:00"": cannot parse "0:00"" as "2006"
Помогите плиз разобраться
Go
1
2
3
4
5
6
7
8
type Train struct {
    TrainID            int
    DepartureStationID int
    ArrivalStationID   int
    Price              float32
    ArrivalTime        time.Time
    DepartureTime      time.Time
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.07.2022, 23:26
Ответы с готовыми решениями:

Как открыть файл JSON в JavaScript?
Мне требуется ваша помощь. Я пытаюсь открыть файл json и вывести данные на страницу с помощью JavaScript. Дело в том, что с помощью этого...

Как открыть файл 7мб с json file_get_contents и json_decode php?
Добрый вечер. Не могу прочитать файл этими функциями file_get_contents и json_decode. Когда открываю так $file =...

Как открыть и прочитать текстовый файл в котором содержиться json код
Здравствуйте! Столкнулся с проблемой как прочитать текстовый файл в котором содержатся JSON массивы и объекты?

34
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
31.07.2022, 06:13
Где файл json, где код, который уже написали?..
0
2 / 2 / 0
Регистрация: 03.05.2017
Сообщений: 163
31.07.2022, 15:37  [ТС]
Вот фрагмент
{
"trainId": 907,
"departureStationId": 1909,
"arrivalStationId": 1929,
"price": 1790.87,
"arrivalTime": "00:50:00",
"departureTime": "20:00:00"
},
{
"trainId": 908,
"departureStationId": 1909,
"arrivalStationId": 1929,
"price": 1790.87,
"arrivalTime": "00:50:00",
"departureTime": "20:00:00"
},

Добавлено через 49 секунд
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
filename, err := os.Open("data.json")
    if err != nil {
        log.Fatal(err)
    }
    defer filename.Close()
 
    data, err := ioutil.ReadAll(filename)
 
    if err != nil {
        log.Fatal(err)
    }
 
    var Trains []Train
 
    jsonErr := json.Unmarshal(data, &Trains)
 
    if jsonErr != nil {
        log.Fatal(jsonErr)
    }
    fmt.Println(Trains)
Добавлено через 5 часов 9 минут
Вот полный код, тут нужно вывести поезда которые удовлетворяют какие-то критериии но для начала хочу понять как например вывести все поезда
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package main
 
import (
    "encoding/json"
    "errors"
    "fmt"
    "io/ioutil"
    "log"
    "os"
    "strings"
    "time"
)
 
type Trains []Train
 
type Train struct {
    TrainID            int
    DepartureStationID int
    ArrivalStationID   int
    Price              float32
    ArrivalTime        time.Time
    DepartureTime      time.Time
}
 
var (
    unsupportedCriteria      = errors.New("unsupported criteria")
    emptyDepartureStation    = errors.New("empty departure station")
    emptyArrivalStation      = errors.New("empty arrival station")
    badArrivalStationInput   = errors.New("bad arrival station input")
    badDepartureStationInput = errors.New("bad departure station input")
)
 
func (t *Train) UnmarshalJSON(b []byte) (err error) {
    layout := "15:04:05"
 
    s := strings.Trim(string(b), """) // remove quotes
    if s == "null" {
        return
    }
    t.ArrivalTime, err = time.Parse(layout, s)
    t.DepartureTime, err = time.Parse(layout, s)
    return
}
 
func (t Trains) sortByCriteria(criteria string) {
 
}
 
func DataInput() (departureStation, arrivalStation, criteria string) {
    fmt.Print("Departure station: ")
    fmt.Scan(&departureStation)
    fmt.Print("Arrival station: ")
    fmt.Scan(&arrivalStation)
    fmt.Print("Criteria: ")
    fmt.Scan(&criteria)
 
    return
}
 
func main() {
 
}
 
func FindTrains(departureStation, arrivalStation, criteria string) (Trains, error) {
 
    filename, err := os.Open("data.json")
    if err != nil {
        log.Fatal(err)
    }
    defer filename.Close()
 
    data, err := ioutil.ReadAll(filename)
 
    if err != nil {
        log.Fatal(err)
    }
 
    var Trains []Train
 
    jsonErr := json.Unmarshal(data, &Trains)
 
    if jsonErr != nil {
        log.Fatal(jsonErr)
    }
 
    return Trains, nil // маєте повернути правильні значення
}
Добавлено через 2 минуты
Проблема в пакете тайм как я понимаю, для решения есть функция UnmarshalJSON но она реализована не правильно скорее всего и как это связать между собой не пойму
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
31.07.2022, 17:43
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main
 
import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "strings"
    "time"
)
 
type TrainTime time.Time
 
type Trains []struct {
    TrainID            int       `json:"trainId"`
    DepartureStationID int       `json:"departureStationId"`
    ArrivalStationID   int       `json:"arrivalStationId"`
    Price              float64   `json:"price"`
    ArrivalTime        TrainTime `json:"arrivalTime"`
    DepartureTime      TrainTime `json:"departureTime"`
}
 
func (tt *TrainTime) UnmarshalJSON(b []byte) error {
    timeStr := string(b)
    t, _ := time.Parse("15:04:05", strings.Trim(timeStr, "\"")) // handle errors
    *tt = TrainTime(t)
    return nil
}
 
func (tt TrainTime) String() string {
    return time.Time(tt).Format("15:04:05")
}
 
func main() {
    data, _ := ioutil.ReadFile("data.json") // handle errors
    var trains Trains
    _ = json.Unmarshal(data, &trains) // handle errors
 
    for _, train := range trains {
        fmt.Printf("%+v\n", train)
    }
}
Code
1
2
{TrainID:907 DepartureStationID:1909 ArrivalStationID:1929 Price:1790.87 ArrivalTime:00:50:12 DepartureTime:20:00:00}
{TrainID:908 DepartureStationID:1909 ArrivalStationID:1929 Price:1790.87 ArrivalTime:01:50:23 DepartureTime:22:00:40}
1
2 / 2 / 0
Регистрация: 03.05.2017
Сообщений: 163
31.07.2022, 20:11  [ТС]
Jabbson, Спасибо, а можно както засунуть это в функцию UnmarshalJSON?, не могу понять как это сделать
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
31.07.2022, 20:39
так это и есть функция UnmarshalJSON... строка 22
0
2 / 2 / 0
Регистрация: 03.05.2017
Сообщений: 163
01.08.2022, 17:10  [ТС]
Jabbson, Привет, помоги пожалуйста правильно вывести результат, я написал функции но как их совместить и вивести три первых поезда по заданым критериям понят не могу
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package main
 
import (
    "encoding/json"
    "errors"
    "fmt"
    "io/ioutil"
    "log"
    "os"
    "sort"
    "strconv"
    "time"
)
 
type Trains []Train
 
type Train struct {
    TrainID            int
    DepartureStationID int
    ArrivalStationID   int
    Price              float32
    ArrivalTime        time.Time
    DepartureTime      time.Time
}
 
var (
    unsupportedCriteria      = errors.New("unsupported criteria")
    emptyDepartureStation    = errors.New("empty departure station")
    emptyArrivalStation      = errors.New("empty arrival station")
    badArrivalStationInput   = errors.New("bad arrival station input")
    badDepartureStationInput = errors.New("bad departure station input")
)
 
func (t *Train) UnmarshalJSON(b []byte) (err error) {
    type TrainDuplicate Train
 
    tt := struct {
        ArrivalTime   string
        DepartureTime string
        *TrainDuplicate
    }{
        TrainDuplicate: (*TrainDuplicate)(t),
    }
    err = json.Unmarshal(b, &tt)
    if err != nil {
        return err
    }
 
    t.ArrivalTime, err = time.Parse("15:04:05", tt.ArrivalTime)
    if err != nil {
        return err
    }
 
    t.DepartureTime, err = time.Parse("15:04:05", tt.DepartureTime)
    if err != nil {
        return err
    }
    return nil
}
 
func (t Trains) sortByCriteria(criteria string) {
    switch criteria {
    case "price":
        sort.SliceStable(t, func(i, j int) bool {
            return t[i].Price < t[j].Price
        })
    case "arrival-time":
        sort.SliceStable(t, func(i, j int) bool {
            return t[i].ArrivalTime.Before(t[j].ArrivalTime)
        })
    case "departure-time":
        sort.SliceStable(t, func(i, j int) bool {
            return t[i].DepartureTime.Before(t[j].DepartureTime)
        })
    }
}
 
func FindTrains(departureStation, arrivalStation, criteria string) (Trains, error) {
 
    var stationLimit = 1
 
    filename, err := os.Open("data.json")
    if err != nil {
        log.Fatal(err)
    }
    defer filename.Close()
 
    data, err := ioutil.ReadAll(filename)
 
    if err != nil {
        log.Fatal(err)
    }
 
    var Trains []Train
 
    jsonErr := json.Unmarshal(data, &Trains)
 
    if jsonErr != nil {
        log.Fatal(jsonErr)
    }
 
    if departureStation == "" {
        return nil, emptyDepartureStation
    }
 
    depStation, err := strconv.Atoi(departureStation)
    if err != nil {
        return nil, badDepartureStationInput
    }
 
    if depStation < stationLimit {
        return nil, badDepartureStationInput
    }
 
    if arrivalStation == "" {
        return nil, emptyArrivalStation
    }
 
    arrStation, err := strconv.Atoi(arrivalStation)
    if err != nil {
        return nil, badArrivalStationInput
    }
 
    if arrStation < stationLimit {
        return nil, badDepartureStationInput
    }
 
    return Trains, nil 
}
 
func PrintTrains(trains Trains) {
    fmt.Printf("trainId depStId arrStId price   arrivalTime    departureTime\n")
    for _, train := range trains {
        fmt.Printf("{TrainID: %d, DepartureStationID: %d, ArrivalStationID: %d, Price: %.2f, ArrivalTime: time.Date(%d, time.%s, %d, %d, %d, %d, time.%s), DepartureTime: time.Date(%d, time.%s, %d, %d, %d, %d, time.%s)}\n", train.TrainID, train.DepartureStationID, train.ArrivalStationID, train.Price, train.ArrivalTime.Year(), train.ArrivalTime.Month().String(), train.ArrivalTime.Day(), train.ArrivalTime.Hour(), train.ArrivalTime.Minute(), train.ArrivalTime.Second(), train.ArrivalTime.Location(), train.DepartureTime.Year(), train.DepartureTime.Month().String(), train.DepartureTime.Day(), train.DepartureTime.Hour(), train.DepartureTime.Minute(), train.DepartureTime.Second(), train.DepartureTime.Location())
    }
}
 
func main() {
    var departureStation, arrivalStation, criteria string
 
    fmt.Print("Departure station: ")
    fmt.Scanln(&departureStation)
 
    fmt.Print("Arrival station: ")
    fmt.Scanln(&arrivalStation)
 
    fmt.Print("Criteria: ")
    fmt.Scanln(&criteria)
 
    result, err := FindTrains(departureStation, arrivalStation, criteria)
    if err != nil {
        log.Fatal(err)
    }
 
    PrintTrains(result)
 
}
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
01.08.2022, 17:17
Цитата Сообщение от AAA999 Посмотреть сообщение
Jabbson, Привет, помоги пожалуйста правильно вывести результат, я написал функции но как их совместить и вивести три первых поезда по заданым критериям понят не могу
Что конкретно не получается? Какая-то ошибка?
0
2 / 2 / 0
Регистрация: 03.05.2017
Сообщений: 163
01.08.2022, 17:50  [ТС]
Jabbson, выводит все елементы с json
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
01.08.2022, 17:50
Лучший ответ Сообщение было отмечено AAA999 как решение

Решение

Проблема у Вас из-за того, что
1) Вы перемешали имя переменной и тип переменной
2) Возвращаете значение отсортированного слайса, в то время как сам метод sortByCriteria ничего не возвращает.

С минимальными изменениями, FindTrains будет выглядеть вот так

Python
1
2
3
4
5
6
7
8
func FindTrains(departureStation, arrivalStation, criteria string) (Trains, error) {
    ...
    var t Trains
    jsonErr := json.Unmarshal(data, &t)
    ...
    t.sortByCriteria(criteria)
    return t, nil
}
0
2 / 2 / 0
Регистрация: 03.05.2017
Сообщений: 163
01.08.2022, 18:00  [ТС]
Jabbson, А чтобы 3 первых поезда вывело?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
01.08.2022, 18:02
Go
1
return t[:3], nil
0
2 / 2 / 0
Регистрация: 03.05.2017
Сообщений: 163
01.08.2022, 18:05  [ТС]
Jabbson, Да, спасибо большое. Вот еще заметил, что я ввожу станцию отправления и ст прибытия но оно игнорит эти параметры и выводит 3 первых поезда по критерию
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
01.08.2022, 18:07
Цитата Сообщение от AAA999 Посмотреть сообщение
Вот еще заметил, что я ввожу станцию отправления и ст прибытия но оно игнорит эти параметры и выводит 3 первых поезда по критерию
да, Вы с этими значениями ничего не делаете, вот код их и не учитывает
0
2 / 2 / 0
Регистрация: 03.05.2017
Сообщений: 163
01.08.2022, 18:09  [ТС]
Jabbson, Покажете как их тут учитывать?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
01.08.2022, 18:10
Цитата Сообщение от AAA999 Посмотреть сообщение
Покажете как их тут учитывать?
попробуете сначала сами?
0
2 / 2 / 0
Регистрация: 03.05.2017
Сообщений: 163
01.08.2022, 18:14  [ТС]
Jabbson, Ну вот я думал когда заполняю значения и передаю в функцию то они учитываються
Go
1
2
3
4
5
6
7
8
9
10
11
12
var departureStation, arrivalStation, criteria string
 
    fmt.Print("Departure station: ")
    fmt.Scanln(&departureStation)
 
    fmt.Print("Arrival station: ")
    fmt.Scanln(&arrivalStation)
 
    fmt.Print("Criteria: ")
    fmt.Scanln(&criteria)
 
    result, err := FindTrains(departureStation, arrivalStation, criteria)
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
01.08.2022, 18:15
Цитата Сообщение от AAA999 Посмотреть сообщение
когда заполняю значения и передаю в функцию то они учитываються
да, заполняете и передаете, но внутри функции что с ними происходит?
0
2 / 2 / 0
Регистрация: 03.05.2017
Сообщений: 163
01.08.2022, 18:27  [ТС]
Jabbson, Нужно чтобы функция sortByCriteria возвращала еще и эти поля?

Добавлено через 2 минуты
То есть добавить еще два кейса в switch
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
01.08.2022, 18:30
sortByCriteria - сортирует по критериям (имя какбэ намекаэ), добавить фильтрацию в код этой функции было бы не очень логично.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2022, 18:30
Помогаю со студенческими работами здесь

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Дополнительные сведения: Cannot deserialize the current JSON object (e.g. {&quot;name&quot;:&quot;value&quot;}) into type 'System.Collections.Generic.List`1'...

Java, JSON и JSON Simple. Непонятка с созданием объекта JSON на сервере для отправки на фронт
Здравствуйте. Разрабатываю интернет-магазин на Java. Мне нужно на фронте получить список товаров из базы данных для отображения на...

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Всем привет! Помогите, плиз, разобраться с ошибкой: An unhandled exception of type 'Newtonsoft.Json.JsonSerializationException'...

Нарисовала фигуры на QGraphicsScene. Как их сохранить в XML, JSON чтобы потом можно было их открыть?
подскажите как QGraphicsScene сохранить в XML и JSON чтобы потом можно было их открыть? к примеру рисую просто линию QGraphicsView...

Не работает модуль json (функции json.dump(), json.load()
При запуске кода по сохранению и прочтению данных, сгенерированных пользователем: import json def get_stored_username(): ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru