Spec-Zone.ru › Nim 1

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API