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

This section is empty.

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) Float32

func (r *Lexer) Float32() float32

func (*Lexer) Float32Str

func (r *Lexer) Float32Str() float32

func (*Lexer) Float64

func (r *Lexer) Float64() float64

func (*Lexer) Float64Str

func (r *Lexer) Float64Str() float64

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) JsonNumber

func (r *Lexer) JsonNumber() json.Number

JsonNumber fetches and json.Number from 'encoding/json' package. Both int, float or string, contains them are valid values

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