ast

package
v1.0.0-beta Latest Latest
Warning

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

Go to latest
Published: Sep 18, 2021 License: Apache-2.0 Imports: 10 Imported by: 26

Documentation

Index

Constants

View Source
const (
	V_NONE   = 0
	V_ERROR  = 1
	V_NULL   = 2
	V_TRUE   = 3
	V_FALSE  = 4
	V_ARRAY  = 5
	V_OBJECT = 6
	V_STRING = 7
	V_NUMBER = int(_V_NUMBER)
)

Variables

View Source
var (
	ErrNotExist      error = nodeNotExist
	ErrUnsupportType error = nodeUnsupportType
)

Functions

func Loads

func Loads(src string) (int, interface{}, error)

Loads parse all json into interface{}

func LoadsUseNumber

func LoadsUseNumber(src string) (int, interface{}, error)

LoadsUseNumber parse all json into interface{}, with numeric nodes casted to json.Number

Types

type Iterator

type Iterator struct {
	// contains filtered or unexported fields
}

func (*Iterator) HasNext

func (self *Iterator) HasNext() bool

func (*Iterator) Len

func (self *Iterator) Len() int

func (*Iterator) Pos

func (self *Iterator) Pos() int

type ListIterator

type ListIterator struct {
	Iterator
}

func (*ListIterator) Next

func (self *ListIterator) Next(v *Node) bool

type Node

type Node struct {
	// contains filtered or unexported fields
}

func NewArray

func NewArray(v []Node) Node

NewArray creates a node of type V_ARRAY, using v as its underlying children

func NewBool

func NewBool(v bool) Node

NewBool creates a node of type bool:

If v is true, returns V_TRUE node
If v is false, returns V_FALSE node

func NewNull

func NewNull() Node

NewNull creates a node of type V_NULL

func NewNumber

func NewNumber(v string) Node

NewNumber creates a json.Number node v must be a decimal string complying with RFC8259

func NewObject

func NewObject(v []Pair) Node

NewObject creates a node of type V_OBJECT, using v as its underlying children

func NewString

func NewString(v string) Node

NewString creates a node of type string

func (*Node) Add

func (self *Node) Add(node Node) error

Add appends the given node under array node

func (*Node) Array

func (self *Node) Array() ([]interface{}, error)

Array loads all indexes of an array node

func (*Node) ArrayUseNode

func (self *Node) ArrayUseNode() ([]Node, error)

ArrayUseNode copys both parsed and non-parsed chidren nodes, and indexes them by original order

func (*Node) ArrayUseNumber

func (self *Node) ArrayUseNumber() ([]interface{}, error)

ArrayUseNumber loads all indexes of an array node, with numeric nodes casted to json.Number

func (*Node) Bool

func (self *Node) Bool() (bool, error)

Bool_E returns bool value represented by this node

If node type is not types.V_TRUE or types.V_FALSE, or V_RAW (must be a bool json value), it will return error

func (*Node) Cap

func (self *Node) Cap() (int, error)

Cap returns malloc capacity of a array|object node for children

func (*Node) Check

func (self *Node) Check() error

Check check if the node itself is valid, and return:

  • ErrNotFound If the node does not exist
  • Its underlying error If the node is V_ERROR

func (Node) Error

func (self Node) Error() string

Error returns error message if the node is invalid

func (*Node) Exists

func (self *Node) Exists() bool

Exists returns false only if the node is nil or got by invalid path

func (*Node) Float64

func (self *Node) Float64() (float64, error)

Float64 as above.

func (*Node) Get

func (self *Node) Get(key string) *Node

Get loads given key of an object node on demands

func (*Node) GetByPath

func (self *Node) GetByPath(path ...interface{}) *Node

GetByPath load given path on demands, which only ensure nodes before this path got parsed

func (*Node) Index

func (self *Node) Index(idx int) *Node

Index indexies node at given idx, node type CAN be either V_OBJECT or V_ARRAY

func (*Node) IndexOrGet

func (self *Node) IndexOrGet(idx int, key string) *Node

IndexOrGet firstly use idx to index a value and check if its key matches If not, then use the key to search value

func (*Node) IndexPair

func (self *Node) IndexPair(idx int) *Pair

IndexPair indexies pair at given idx, node type MUST be either V_OBJECT

func (*Node) Int64

func (self *Node) Int64() (int64, error)

Int64 as above.

func (*Node) Interface

func (self *Node) Interface() (interface{}, error)

Interface loads all children under all pathes from this node, and converts itself as generic type. WARN: all numberic nodes are casted to float64

func (*Node) InterfaceUseNode

func (self *Node) InterfaceUseNode() (interface{}, error)

InterfaceUseNode clone itself as a new node, or its children as map[string]Node (or []Node)

func (*Node) InterfaceUseNumber

func (self *Node) InterfaceUseNumber() (interface{}, error)

InterfaceUseNumber works same with Interface() except numberic nodes are casted to json.Number

func (Node) IsRaw

func (self Node) IsRaw() bool

IsRaw returns true if node's underlying value is raw json

func (*Node) Len

func (self *Node) Len() (int, error)

Len returns children count of a array|object|string node For partially loaded node, it also works but only counts the parsed children

func (*Node) Map

func (self *Node) Map() (map[string]interface{}, error)

Map loads all keys of an object node

func (*Node) MapUseNode

func (self *Node) MapUseNode() (map[string]Node, error)

MapUseNode scans both parsed and non-parsed chidren nodes, and map them by their keys

func (*Node) MapUseNumber

func (self *Node) MapUseNumber() (map[string]interface{}, error)

MapUseNumber loads all keys of an object node, with numeric nodes casted to json.Number

func (*Node) MarshalJSON

func (self *Node) MarshalJSON() ([]byte, error)

func (*Node) Number

func (self *Node) Number() (json.Number, error)

Number as above.

func (*Node) Properties

func (self *Node) Properties() (ObjectIterator, error)

Properties returns iterator for object's children traversal

func (*Node) Raw

func (self *Node) Raw() (string, error)

Raw returns underlying json string of an raw node, which usually created by Search() api

func (*Node) Set

func (self *Node) Set(key string, node Node) (bool, error)

Set sets the node of given key under object parent If the key doesn't exist, it will be append to the last

func (*Node) SetByIndex

func (self *Node) SetByIndex(index int, node Node) (bool, error)

SetByIndex sets the node of given index

The index must within parent array's children

func (*Node) String

func (self *Node) String() (string, error)

String returns raw string value if node type is V_STRING. Or return the string representation of other types:

V_NULL => "null",
V_TRUE => "true",
V_FALSE => "false",
V_NUMBER => "[0-9\.]*"

func (Node) Type

func (self Node) Type() int

Type returns json type represented by the node It will be one of belows:

V_NONE   = 0
V_ERROR  = 1
V_NULL   = 2
V_TRUE   = 3
V_FALSE  = 4
V_ARRAY  = 5
V_OBJECT = 6
V_STRING = 7
V_NUMBER = 33

func (*Node) UnsafeArray

func (self *Node) UnsafeArray() ([]Node, error)

ArrayUnsafe exports the underlying pointer to its children array WARN: don't use it unless you know what you are doing

func (*Node) UnsafeMap

func (self *Node) UnsafeMap() ([]Pair, error)

MapUnsafe exports the underlying pointer to its children map WARN: don't use it unless you know what you are doing

func (*Node) Unset

func (self *Node) Unset(key string) (bool, error)

Unset remove the node of given key under object parent

func (*Node) UnsetByIndex

func (self *Node) UnsetByIndex(index int) (bool, error)

UnsetByIndex remove the node of given index

func (*Node) Valid

func (self *Node) Valid() bool

Valid returns true when the node has any type of V_NULL ~ V_STRING, or V_NUMBER

func (*Node) Values

func (self *Node) Values() (ListIterator, error)

Values returns iterator for array's children traversal

type ObjectIterator

type ObjectIterator struct {
	Iterator
}

func (*ObjectIterator) Next

func (self *ObjectIterator) Next(p *Pair) bool

type Pair

type Pair struct {
	Key   string
	Value Node
}

type Parser

type Parser struct {
	// contains filtered or unexported fields
}

func NewParser

func NewParser(src string) *Parser

func (*Parser) ExportError

func (self *Parser) ExportError(err types.ParsingError) error

ExportError converts types.ParsingError to std Error

func (*Parser) Parse

func (self *Parser) Parse() (Node, types.ParsingError)

func (*Parser) Pos

func (self *Parser) Pos() int

type Searcher

type Searcher struct {
	// contains filtered or unexported fields
}

func NewSearcher

func NewSearcher(str string) *Searcher

func (*Searcher) GetByPath

func (self *Searcher) GetByPath(path ...interface{}) (Node, error)

Jump to

Keyboard shortcuts

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