jlexer

package
v0.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 22, 2021 License: MIT Imports: 11 Imported by: 13

Documentation

Overview

Package jlexer contains a JSON lexer implementation.

It is expected that it is mostly used with generated parser code, so the interface is tuned for a parser that knows what kind of data is expected.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewError

func NewError(msg string) error

This is a (temporary?) helper to use in place of errors.New

func ValidJSON

func ValidJSON(data []byte) bool

ValidJSON reports whether data is a valid JSON encoding.

Types

type Lexer

type Lexer struct {
	Data []byte // Input data given to the lexer.

	UseMultipleErrors bool // If we want to use multiple errors.
	// contains filtered or unexported fields
}

Lexer is a JSON lexer: it iterates over JSON tokens in a byte slice.

func (*Lexer) AddError

func (r *Lexer) AddError(e error)

func (*Lexer) AddNonFatalError

func (r *Lexer) AddNonFatalError(e error)

func (*Lexer) Bool

func (r *Lexer) Bool() bool

Bool reads a true or false boolean keyword.

func (*Lexer) Bytes

func (r *Lexer) Bytes() []byte

Bytes reads a string literal and base64 decodes it into a byte slice.

func (*Lexer) Consumed

func (r *Lexer) Consumed()

Consumed reads all remaining bytes from the input, publishing an error if there is anything but whitespace remaining.

func (*Lexer) Delim

func (r *Lexer) Delim(c byte)

Delim consumes a token and verifies that it is the given delimiter.

func (*Lexer) Error

func (r *Lexer) Error() error

func (*Lexer) FetchToken

func (r *Lexer) FetchToken()

FetchToken scans the input for the next token.

func (*Lexer) GetNonFatalErrors

func (r *Lexer) GetNonFatalErrors() []*LexerError

func (*Lexer) GetPos

func (r *Lexer) GetPos() int

func (*Lexer) Int

func (r *Lexer) Int() int

func (*Lexer) Int16

func (r *Lexer) Int16() int16

func (*Lexer) Int16Str

func (r *Lexer) Int16Str() int16

func (*Lexer) Int32

func (r *Lexer) Int32() int32

func (*Lexer) Int32Str

func (r *Lexer) Int32Str() int32

func (*Lexer) Int64

func (r *Lexer) Int64() int64

func (*Lexer) Int64Str

func (r *Lexer) Int64Str() int64

func (*Lexer) Int8

func (r *Lexer) Int8() int8

func (*Lexer) Int8Str

func (r *Lexer) Int8Str() int8

func (*Lexer) IntStr

func (r *Lexer) IntStr() int

func (*Lexer) Interface

func (r *Lexer) Interface() interface{}

Interface fetches an interface{} analogous to the 'encoding/json' package.

func (*Lexer) IsDelim

func (r *Lexer) IsDelim(c byte) bool

IsDelim returns true if there was no scanning error and next token is the given delimiter.

func (*Lexer) IsNull

func (r *Lexer) IsNull() bool

IsNull returns true if the next token is a null keyword.

func (*Lexer) IsStart

func (r *Lexer) IsStart() bool

IsStart returns whether the lexer is positioned at the start of an input string.

func (*Lexer) Null

func (r *Lexer) Null()

Null verifies that the next token is null and consumes it.

func (*Lexer) Ok

func (r *Lexer) Ok() bool

Ok returns true if no error (including io.EOF) was encountered during scanning.

func (*Lexer) Raw

func (r *Lexer) Raw() []byte

Raw fetches the next item recursively as a data slice

func (*Lexer) Skip

func (r *Lexer) Skip()

Skip skips a single token.

func (*Lexer) SkipRecursive

func (r *Lexer) SkipRecursive()

SkipRecursive skips next array or object completely, or just skips a single token if not an array/object.

Note: no syntax validation is performed on the skipped data.

func (*Lexer) String

func (r *Lexer) String() string

String reads a string literal.

func (*Lexer) StringIntern

func (r *Lexer) StringIntern() string

StringIntern reads a string literal, and performs string interning on it.

func (*Lexer) Uint

func (r *Lexer) Uint() uint

func (*Lexer) Uint16

func (r *Lexer) Uint16() uint16

func (*Lexer) Uint16Str

func (r *Lexer) Uint16Str() uint16

func (*Lexer) Uint32

func (r *Lexer) Uint32() uint32

func (*Lexer) Uint32Str

func (r *Lexer) Uint32Str() uint32

func (*Lexer) Uint64

func (r *Lexer) Uint64() uint64

func (*Lexer) Uint64Str

func (r *Lexer) Uint64Str() uint64

func (*Lexer) Uint8

func (r *Lexer) Uint8() uint8

func (*Lexer) Uint8Str

func (r *Lexer) Uint8Str() uint8

func (*Lexer) UintStr

func (r *Lexer) UintStr() uint

func (*Lexer) UintptrStr

func (r *Lexer) UintptrStr() uintptr

func (*Lexer) UnsafeBytes

func (r *Lexer) UnsafeBytes() []byte

UnsafeBytes returns the byte slice if the token is a string literal.

func (*Lexer) UnsafeFieldName

func (r *Lexer) UnsafeFieldName(skipUnescape bool) string

UnsafeFieldName returns current member name string token

func (*Lexer) UnsafeString

func (r *Lexer) UnsafeString() string

UnsafeString returns the string value if the token is a string literal.

Warning: returned string may point to the input buffer, so the string should not outlive the input buffer. Intended pattern of usage is as an argument to a switch statement.

func (*Lexer) WantColon

func (r *Lexer) WantColon()

WantColon requires a colon to be present before fetching next token.

func (*Lexer) WantComma

func (r *Lexer) WantComma()

WantComma requires a comma to be present before fetching next token.

type LexerError

type LexerError struct {
	Reason string
	Offset int
	Data   string
}

LexerError implements the error interface and represents all possible errors that can be generated during parsing the JSON data.

func (*LexerError) Error

func (l *LexerError) Error() string

type SyntaxError

type SyntaxError struct {
	Offset int64 // error occurred after reading Offset bytes
	// contains filtered or unexported fields
}

A SyntaxError is a description of a JSON syntax error.

func (*SyntaxError) Error

func (e *SyntaxError) Error() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL