json

package module
v0.0.0-...-10aa970 Latest Latest
Warning

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

Go to latest
Published: Oct 8, 2019 License: MIT Imports: 7 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Reader

type Reader struct {
	Buf []byte

	// Current parsed trunk start position
	Start int

	// Current parsed trunk end position, Buf[Start:End] is the current parsed trunk
	End int

	// Last parsed string/property name.
	Str []byte
	// contains filtered or unexported fields
}

Read json string as a sequence of Json Token. After create Reader struct, must call Init() method.

func NewReader

func NewReader(json []byte) *Reader

NewReader create a json reader from buf

func (*Reader) Expect

func (r *Reader) Expect(tt TokenType) error

If next token is not tt, returns non-nil error

func (*Reader) ExpectName

func (r *Reader) ExpectName(name string) error

If next token is not PropertyName, or its name not expected, return non-nil error

func (*Reader) Init

func (r *Reader) Init(json []byte)

Init Reader struct

func (*Reader) Next

func (r *Reader) Next() (tt TokenType, err error)

Parse next json token, return token type. If json string is invalid, Next() return non-nil error.

func (*Reader) ReadNumber

func (r *Reader) ReadNumber() (float64, error)

ReadNumber return next float value, return non-nil error if next token not number.

func (*Reader) ReadString

func (r *Reader) ReadString() (string, error)

ReadString return next string value, return non-nil error if next token not string.

func (*Reader) Undo

func (r *Reader) Undo()

Undo last Next() call.

type TokenType

type TokenType int

Json Token type

const (
	Null TokenType
	Bool
	// If the token is number, the number value not parsed, caller should parse
	// itself from Buf[Start:End]. Why Reader not parse number as double? Because:
	//
	//  1. Caller may parse number in different way, such as parse it as decimal,
	//		 parse to double, then decimal will lose precision.
	//  2. Performance, strconv.ParseFloat() is expensive, caller can use cheaper
	//     parse function such as ParseInt() or just treat it as string because
	//     she knows the underlay type exactly.
	//
	// And also means, the number format maybe invalid even the Reader report it
	// as a valid Number, because Reader use a very simple way to parse number
	// string. Caller should process the error, such as check the err result of
	// ParseFloat().
	Number
	// If the token is string or property name, Buf[Start:End] contains the raw
	// json string trunk include `"` quote. The parsed value stores in Buf.Str field.
	String
	BeginObject
	PropertyName // Json object name
	EndObject
	BeginArray
	EndArray
	EOF
)

func (TokenType) String

func (i TokenType) String() string

type Writer

type Writer struct {

	// use bufio.Writer because it will cache writer error, and do not need check error
	// on every Write().
	*bufio.Writer
	// contains filtered or unexported fields
}

Writer write json encoded string.

Writer stores error occurred during write, WriteXXX() functions do not return error. If an error stored in Writer, all WriteXXX() functions quit immediately. Must call .Flush() periodically to check does error have occurred.

func NewWriter

func NewWriter(w io.Writer) *Writer

Create a new writer that output json string to a IO Writer. Argument `w' must also implement io.ByteWriter interface.

func (*Writer) BeginArray

func (w *Writer) BeginArray()

func (*Writer) BeginObject

func (w *Writer) BeginObject()

func (*Writer) EmptyArray

func (w *Writer) EmptyArray()

func (*Writer) EmptyObject

func (w *Writer) EmptyObject()

func (*Writer) EndArray

func (w *Writer) EndArray()

func (*Writer) EndObject

func (w *Writer) EndObject()

func (*Writer) Flush

func (w *Writer) Flush() error

Flush written content to underlay writer, and report whether an underlay error happened?

func (*Writer) WriteBool

func (w *Writer) WriteBool(val bool)

func (*Writer) WriteFalse

func (w *Writer) WriteFalse()

func (*Writer) WriteName

func (w *Writer) WriteName(name string)

func (*Writer) WriteNull

func (w *Writer) WriteNull()

func (*Writer) WriteNumber

func (w *Writer) WriteNumber(num float64)

func (*Writer) WriteRaw

func (w *Writer) WriteRaw(raw string)

WriteRaw write directly to the underlay writer.

func (*Writer) WriteString

func (w *Writer) WriteString(s string)

func (*Writer) WriteTrue

func (w *Writer) WriteTrue()

Jump to

Keyboard shortcuts

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