2024 · json-lib · линия «учёба»

json-lib

JSON-парсер на C++ из финального проекта курса.

status
архив
stack
C++17 · STL
links
github ↗
since
2024

черновик · текст собрал Claude по репозиториям и заметкам, перепишу сам

Небольшая JSON-библиотека, написанная в октябре 2024 года для транспортного справочника — финального проекта курса C++.

Она читает JSON из потока и выводит его обратно. Узел документа хранится в std::variant: null, логическое значение, целое или дробное число, строка, массив или словарь. Разбор рекурсивный: функция смотрит на первый символ и решает, что читать дальше. При ошибке в данных выбрасывается ParsingError, при запросе значения не того типа — logic_error.

В отдельный репозиторий она переехала, чтобы на следующем шаге курса сделать к ней билдер — сборку JSON цепочкой вызовов. Файлы json_builder в репозитории есть, но пустые: дальше заготовки я не дошёл. Тесты в main.cpp — из курса.

Фрагмент

Разбор массива:

Node LoadArray(std::istream& input) {
    Array result;
    char c;

    while (input >> c) {
        if (c == ']') {  // Пустой массив
            return Node{result};
        } else {
            input.putback(c);
            result.push_back(LoadNode(input));  // Загрузка элемента массива
        }

        // Ожидаем запятую или закрывающую скобку
        input >> c;
        if (c == ']') {
            return Node{result};
        } else if (c != ',') {
            throw ParsingError("Expected ',' or ']' in array");
        }
    }

    throw ParsingError("Expected ']' at the end of array");
}