parsejson
Этот модуль реализует парсер JSON. Он используется и экспортируется модулем стандартной библиотеки json, но также может быть использован независимо.
Импорты
- strutils, lexbase, streams, unicode
Типы
JsonEventKind = enum jsonError, ## an error occurred during parsing jsonEof, ## end of file reached jsonString, ## a string literal jsonInt, ## an integer literal jsonFloat, ## a float literal jsonTrue, ## the value ``true`` jsonFalse, ## the value ``false`` jsonNull, ## the value ``null`` jsonObjectStart, ## start of an object: the ``{`` token jsonObjectEnd, ## end of an object: the ``}`` token jsonArrayStart, ## start of an array: the ``[`` token jsonArrayEnd ## end of an array: the ``]`` token- перечисление всех событий, которые могут произойти при разборе Исходный код Изменить
TokKind = enum tkError, tkEof, tkString, tkInt, tkFloat, tkTrue, tkFalse, tkNull, tkCurlyLe, tkCurlyRi, tkBracketLe, tkBracketRi, tkColon, tkComma
- Исходный код Изменить
JsonError = enum errNone, ## no error errInvalidToken, ## invalid token errStringExpected, ## string expected errColonExpected, ## ``:`` expected errCommaExpected, ## ``,`` expected errBracketRiExpected, ## ``]`` expected errCurlyRiExpected, ## ``}`` expected errQuoteExpected, ## ``"`` or ``'`` expected errEOC_Expected, ## ``*/`` expected errEofExpected, ## EOF expected errExprExpected ## expr expected
- перечисление, которое перечисляет все ошибки, которые могут возникнуть Исходный код Изменить
JsonParser = object of BaseLexer a*: string tok*: TokKind kind: JsonEventKind err: JsonError state: seq[ParserState] filename: string rawStringLiterals: bool
- объект парсера. Исходный код Изменить
JsonKindError = object of ValueError
- вызывается макросом
to, если тип JSON некорректен. Исходный код Изменить JsonParsingError = object of ValueError
- генерируется при ошибке JSON Исходный код Изменить
Константы
errorMessages: array[JsonError, string] = ["no error", "invalid token", "string expected", "\':\' expected", "\',\' expected", "\']\' expected", "\'}\' expected", "\'\"\' or \"\'\" expected", "\'*/\' expected", "EOF expected", "expression expected"]- Исходный код Изменить
Процедуры
proc open(my: var JsonParser; input: Stream; filename: string; rawStringLiterals = false) {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}- инициализирует парсер потоком ввода.
Filenameиспользуется только для красивых сообщений об ошибках. ЕслиrawStringLiteralsравно true, строковые литералы сохраняются вместе с окружающими кавычками, а escape-последовательности в них остаются без изменений. Исходный код Изменить proc close(my: var JsonParser) {...}{.inline, raises: [Exception, IOError, OSError], tags: [WriteIOEffect].}- закрывает парсер
myи связанный с ним поток ввода. Исходный код Изменить proc str(my: JsonParser): string {...}{.inline, raises: [], tags: [].}- возвращает символьные данные для событий:
jsonInt,jsonFloat,jsonStringИсходный код Изменить proc getInt(my: JsonParser): BiggestInt {...}{.inline, raises: [ValueError], tags: [].}- возвращает число для события:
jsonIntИсходный код Изменить proc getFloat(my: JsonParser): float {...}{.inline, raises: [ValueError], tags: [].}- возвращает число для события:
jsonFloatИсходный код Изменить proc kind(my: JsonParser): JsonEventKind {...}{.inline, raises: [], tags: [].}- возвращает текущий тип события для парсера JSON Исходный код Изменить
proc getColumn(my: JsonParser): int {...}{.inline, raises: [], tags: [].}- получить текущую колонку, до которой дошёл парсер. Исходный код Изменить
proc getLine(my: JsonParser): int {...}{.inline, raises: [], tags: [].}- получить текущую строку, до которой дошёл парсер. Исходный код Изменить
proc getFilename(my: JsonParser): string {...}{.inline, raises: [], tags: [].}- получить имя файла, обрабатываемого парсером. Исходный код Изменить
proc errorMsg(my: JsonParser): string {...}{.raises: [ValueError], tags: [].}- возвращает полезное сообщение об ошибке для события
jsonErrorИсходный код Изменить proc errorMsgExpected(my: JsonParser; e: string): string {...}{.raises: [ValueError], tags: [].}- возвращает сообщение об ошибке "
eожидается" в том же формате, что и другие сообщения об ошибках Исходный код Изменить proc parseEscapedUTF16(buf: cstring; pos: var int): int {...}{.raises: [], tags: [].}- Исходный код Изменить
proc getTok(my: var JsonParser): TokKind {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}- Исходный код Изменить
proc next(my: var JsonParser) {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}- извлекает первое/следующее событие. Это управляет парсером. Исходный код Изменить
proc raiseParseErr(p: JsonParser; msg: string) {...}{.noinline, noreturn, raises: [JsonParsingError, ValueError], tags: [].}- вызывает исключение
EJsonParsingError. Исходный код Изменить proc eat(p: var JsonParser; tok: TokKind) {...}{. raises: [IOError, OSError, JsonParsingError, ValueError], tags: [ReadIOEffect].}- Исходный код Изменить
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/parsejson.html