fluffyjson

package module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Jan 30, 2025 License: MIT Imports: 5 Imported by: 0

README

Build Status Go Report Card

fluffyjson

fluffyjson can deal with JSON fluffily.

  • Compatible with encode/json and better interface than interface{}.
  • Useful methods to handle JSON value such as cast, access, visit, and so on.
  • Pure Go implementation.

Usage

Import

import fluffyjson "github.com/hayas1/go-fluffy-json"

Examples

Here is some examples. https://pkg.go.dev/github.com/hayas1/go-fluffy-json#pkg-examples

Documents

Here is some documents. https://pkg.go.dev/github.com/hayas1/go-fluffy-json

Documentation

Overview

fluffyjson can deal with JSON fluffily.

  • Compatible with encode/json and better interface than interface{}.
  • Useful methods to handle JSON value such as cast, access, visit, and so on.
  • Pure Go implementation.

Index

Examples

Constants

View Source
const (
	OBJECT representation = "object"
	ARRAY  representation = "array"
	STRING representation = "string"
	NUMBER representation = "number"
	BOOL   representation = "bool"
	NULL   representation = "null"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Accept

type Accept interface {
	Accept(Visitor) error
}

type Access

type Access interface {
	Access(...Accessor) (JsonValue, error)
	Slice(SliceAccessor) ([]JsonValue, error)
}

type AccessAsArray

type AccessAsArray interface {
	AccessAsArray(...Accessor) (Array, error)
	SliceAsArray(SliceAccessor) ([]Array, error)
}

type AccessAsBool

type AccessAsBool interface {
	AccessAsBool(...Accessor) (Bool, error)
	SliceAsBool(SliceAccessor) ([]Bool, error)
}

type AccessAsNull

type AccessAsNull interface {
	AccessAsNull(...Accessor) (Null, error)
	SliceAsNull(SliceAccessor) ([]Null, error)
}

type AccessAsNumber

type AccessAsNumber interface {
	AccessAsNumber(...Accessor) (Number, error)
	SliceAsNumber(SliceAccessor) ([]Number, error)
}

type AccessAsObject

type AccessAsObject interface {
	AccessAsObject(...Accessor) (Object, error)
	SliceAsObject(SliceAccessor) ([]Object, error)
}

type AccessAsString

type AccessAsString interface {
	AccessAsString(...Accessor) (String, error)
	SliceAsString(SliceAccessor) ([]String, error)
}

type Accessor

type Accessor interface {
	Accessing(JsonValue) (JsonValue, error)
}

type Array

type Array []JsonValue

func CastArray

func CastArray(l []any) (Array, error)

func (*Array) Accept

func (a *Array) Accept(visitor Visitor) error

func (*Array) Access

func (a *Array) Access(ptr ...Accessor) (JsonValue, error)

func (Array) AccessAsArray

func (a Array) AccessAsArray(ptr ...Accessor) (Array, error)

func (Array) AccessAsBool

func (a Array) AccessAsBool(ptr ...Accessor) (Bool, error)

func (Array) AccessAsNull

func (a Array) AccessAsNull(ptr ...Accessor) (Null, error)

func (Array) AccessAsNumber

func (a Array) AccessAsNumber(ptr ...Accessor) (Number, error)

func (Array) AccessAsObject

func (a Array) AccessAsObject(ptr ...Accessor) (Object, error)

func (Array) AccessAsString

func (a Array) AccessAsString(ptr ...Accessor) (String, error)

func (Array) AsArray

func (a Array) AsArray() (Array, error)

func (Array) AsBool

func (a Array) AsBool() (Bool, error)

func (Array) AsNull

func (a Array) AsNull() (Null, error)

func (Array) AsNumber

func (a Array) AsNumber() (Number, error)

func (Array) AsObject

func (a Array) AsObject() (Object, error)

func (Array) AsString

func (a Array) AsString() (String, error)

func (*Array) BreadthFirst

func (v *Array) BreadthFirst() iter.Seq2[Pointer, JsonValue]

func (*Array) DepthFirst

func (v *Array) DepthFirst() iter.Seq2[Pointer, JsonValue]

func (Array) IsArray

func (a Array) IsArray() bool

func (Array) IsBool

func (a Array) IsBool() bool

func (Array) IsNull

func (a Array) IsNull() bool

func (Array) IsNumber

func (a Array) IsNumber() bool

func (Array) IsObject

func (a Array) IsObject() bool

func (Array) IsString

func (a Array) IsString() bool

func (Array) MarshalJSON

func (a Array) MarshalJSON() ([]byte, error)

func (*Array) Slice

func (a *Array) Slice(acc SliceAccessor) ([]JsonValue, error)

func (Array) SliceAsArray

func (a Array) SliceAsArray(acc SliceAccessor) ([]Array, error)

func (Array) SliceAsBool

func (a Array) SliceAsBool(acc SliceAccessor) ([]Bool, error)

func (Array) SliceAsNull

func (a Array) SliceAsNull(acc SliceAccessor) ([]Null, error)

func (Array) SliceAsNumber

func (a Array) SliceAsNumber(acc SliceAccessor) ([]Number, error)

func (Array) SliceAsObject

func (a Array) SliceAsObject(acc SliceAccessor) ([]Object, error)

func (Array) SliceAsString

func (a Array) SliceAsString(acc SliceAccessor) ([]String, error)

func (*Array) UnmarshalJSON

func (a *Array) UnmarshalJSON(data []byte) error

type As

type As interface {
	AsObject
	AsArray
	AsString
	AsNumber
	AsBool
	AsNull
}

type AsArray

type AsArray interface {
	IsArray() bool
	AsArray() (Array, error)
}

type AsBool

type AsBool interface {
	IsBool() bool
	AsBool() (Bool, error)
}

type AsNull

type AsNull interface {
	IsNull() bool
	AsNull() (Null, error)
}

type AsNumber

type AsNumber interface {
	IsNumber() bool
	AsNumber() (Number, error)
}

type AsObject

type AsObject interface {
	IsObject() bool
	AsObject() (Object, error)
}

type AsString

type AsString interface {
	IsString() bool
	AsString() (String, error)
}

type BaseVisitor

type BaseVisitor struct{}

func (*BaseVisitor) GetPointer

func (bv *BaseVisitor) GetPointer() Pointer

func (*BaseVisitor) LeaveArray

func (bv *BaseVisitor) LeaveArray(a *Array) error

func (*BaseVisitor) LeaveArrayEntry

func (bv *BaseVisitor) LeaveArrayEntry(idx int, val JsonValue) error

func (*BaseVisitor) LeaveObject

func (bv *BaseVisitor) LeaveObject(o *Object) error

func (*BaseVisitor) LeaveObjectEntry

func (bv *BaseVisitor) LeaveObjectEntry(key string, val JsonValue) error

func (*BaseVisitor) LeaveRoot

func (bv *BaseVisitor) LeaveRoot(v *RootValue) error

func (*BaseVisitor) SetPointer

func (bv *BaseVisitor) SetPointer(Pointer)

func (*BaseVisitor) VisitArray

func (bv *BaseVisitor) VisitArray(a *Array) error

func (*BaseVisitor) VisitArrayEntry

func (bv *BaseVisitor) VisitArrayEntry(idx int, val JsonValue) error

func (*BaseVisitor) VisitBool

func (bv *BaseVisitor) VisitBool(b *Bool) error

func (*BaseVisitor) VisitNull

func (bv *BaseVisitor) VisitNull(n *Null) error

func (*BaseVisitor) VisitNumber

func (bv *BaseVisitor) VisitNumber(n *Number) error

func (*BaseVisitor) VisitObject

func (bv *BaseVisitor) VisitObject(o *Object) error

func (*BaseVisitor) VisitObjectEntry

func (bv *BaseVisitor) VisitObjectEntry(key string, val JsonValue) error

func (*BaseVisitor) VisitRoot

func (bv *BaseVisitor) VisitRoot(v *RootValue) error

func (*BaseVisitor) VisitString

func (bv *BaseVisitor) VisitString(s *String) error

type Bfs

type Bfs[V Visitor] struct {
	// contains filtered or unexported fields
}

func BfsVisitor

func BfsVisitor[V Visitor](visitor V) *Bfs[V]

Get bfs wrapped visitor

func (*Bfs[V]) GetPointer

func (bfs *Bfs[V]) GetPointer() Pointer

func (*Bfs[V]) LeaveArray

func (bfs *Bfs[V]) LeaveArray(a *Array) error

func (*Bfs[V]) LeaveArrayEntry

func (bfs *Bfs[V]) LeaveArrayEntry(i int, v JsonValue) error

func (*Bfs[V]) LeaveObject

func (bfs *Bfs[V]) LeaveObject(o *Object) error

func (*Bfs[V]) LeaveObjectEntry

func (bfs *Bfs[V]) LeaveObjectEntry(k string, v JsonValue) error

func (*Bfs[V]) LeaveRoot

func (bfs *Bfs[V]) LeaveRoot(v *RootValue) error

func (*Bfs[V]) SetPointer

func (bfs *Bfs[V]) SetPointer(p Pointer)

func (*Bfs[V]) VisitArray

func (bfs *Bfs[V]) VisitArray(a *Array) (err error)

func (*Bfs[V]) VisitArrayEntry

func (bfs *Bfs[V]) VisitArrayEntry(i int, v JsonValue) (err error)

func (*Bfs[V]) VisitBool

func (bfs *Bfs[V]) VisitBool(b *Bool) error

func (*Bfs[V]) VisitNull

func (bfs *Bfs[V]) VisitNull(n *Null) error

func (*Bfs[V]) VisitNumber

func (bfs *Bfs[V]) VisitNumber(n *Number) error

func (*Bfs[V]) VisitObject

func (bfs *Bfs[V]) VisitObject(o *Object) (err error)

func (*Bfs[V]) VisitObjectEntry

func (bfs *Bfs[V]) VisitObjectEntry(k string, v JsonValue) (err error)

func (*Bfs[V]) VisitRoot

func (bfs *Bfs[V]) VisitRoot(v *RootValue) (err error)

func (*Bfs[V]) VisitString

func (bfs *Bfs[V]) VisitString(s *String) error

type Bool

type Bool bool

func CastBool

func CastBool(b bool) (Bool, error)

func (*Bool) Accept

func (b *Bool) Accept(visitor Visitor) error

func (*Bool) Access

func (b *Bool) Access(ptr ...Accessor) (JsonValue, error)

func (Bool) AccessAsArray

func (b Bool) AccessAsArray(ptr ...Accessor) (Array, error)

func (Bool) AccessAsBool

func (b Bool) AccessAsBool(ptr ...Accessor) (Bool, error)

func (Bool) AccessAsNull

func (b Bool) AccessAsNull(ptr ...Accessor) (Null, error)

func (Bool) AccessAsNumber

func (b Bool) AccessAsNumber(ptr ...Accessor) (Number, error)

func (Bool) AccessAsObject

func (b Bool) AccessAsObject(ptr ...Accessor) (Object, error)

func (Bool) AccessAsString

func (b Bool) AccessAsString(ptr ...Accessor) (String, error)

func (Bool) AsArray

func (b Bool) AsArray() (Array, error)

func (Bool) AsBool

func (b Bool) AsBool() (Bool, error)

func (Bool) AsNull

func (b Bool) AsNull() (Null, error)

func (Bool) AsNumber

func (b Bool) AsNumber() (Number, error)

func (Bool) AsObject

func (b Bool) AsObject() (Object, error)

func (Bool) AsString

func (b Bool) AsString() (String, error)

func (*Bool) BreadthFirst

func (v *Bool) BreadthFirst() iter.Seq2[Pointer, JsonValue]

func (*Bool) DepthFirst

func (v *Bool) DepthFirst() iter.Seq2[Pointer, JsonValue]

func (Bool) IsArray

func (b Bool) IsArray() bool

func (Bool) IsBool

func (b Bool) IsBool() bool

func (Bool) IsNull

func (b Bool) IsNull() bool

func (Bool) IsNumber

func (b Bool) IsNumber() bool

func (Bool) IsObject

func (b Bool) IsObject() bool

func (Bool) IsString

func (b Bool) IsString() bool

func (Bool) MarshalJSON

func (b Bool) MarshalJSON() ([]byte, error)

func (*Bool) Slice

func (b *Bool) Slice(acc SliceAccessor) ([]JsonValue, error)

func (Bool) SliceAsArray

func (b Bool) SliceAsArray(acc SliceAccessor) ([]Array, error)

func (Bool) SliceAsBool

func (b Bool) SliceAsBool(acc SliceAccessor) ([]Bool, error)

func (Bool) SliceAsNull

func (b Bool) SliceAsNull(acc SliceAccessor) ([]Null, error)

func (Bool) SliceAsNumber

func (b Bool) SliceAsNumber(acc SliceAccessor) ([]Number, error)

func (Bool) SliceAsObject

func (b Bool) SliceAsObject(acc SliceAccessor) ([]Object, error)

func (Bool) SliceAsString

func (b Bool) SliceAsString(acc SliceAccessor) ([]String, error)

func (*Bool) UnmarshalJSON

func (b *Bool) UnmarshalJSON(data []byte) error

type Dfs

type Dfs[V Visitor] struct {
	// contains filtered or unexported fields
}

func DfsVisitor

func DfsVisitor[V Visitor](visitor V) *Dfs[V]

Get dfs wrapped visitor

func (*Dfs[V]) GetPointer

func (v *Dfs[V]) GetPointer() Pointer

func (*Dfs[V]) LeaveArray

func (dfs *Dfs[V]) LeaveArray(a *Array) error

func (*Dfs[V]) LeaveArrayEntry

func (dfs *Dfs[V]) LeaveArrayEntry(i int, v JsonValue) error

func (*Dfs[V]) LeaveObject

func (dfs *Dfs[V]) LeaveObject(o *Object) error

func (*Dfs[V]) LeaveObjectEntry

func (dfs *Dfs[V]) LeaveObjectEntry(k string, v JsonValue) error

func (*Dfs[V]) LeaveRoot

func (dfs *Dfs[V]) LeaveRoot(v *RootValue) error

func (*Dfs[V]) SetPointer

func (v *Dfs[V]) SetPointer(p Pointer)

func (*Dfs[V]) VisitArray

func (dfs *Dfs[V]) VisitArray(a *Array) (err error)

func (*Dfs[V]) VisitArrayEntry

func (dfs *Dfs[V]) VisitArrayEntry(i int, v JsonValue) (err error)

func (*Dfs[V]) VisitBool

func (dfs *Dfs[V]) VisitBool(b *Bool) error

func (*Dfs[V]) VisitNull

func (dfs *Dfs[V]) VisitNull(n *Null) error

func (*Dfs[V]) VisitNumber

func (dfs *Dfs[V]) VisitNumber(n *Number) error

func (*Dfs[V]) VisitObject

func (dfs *Dfs[V]) VisitObject(o *Object) (err error)

func (*Dfs[V]) VisitObjectEntry

func (dfs *Dfs[V]) VisitObjectEntry(k string, v JsonValue) (err error)

func (*Dfs[V]) VisitRoot

func (dfs *Dfs[V]) VisitRoot(v *RootValue) (err error)

func (*Dfs[V]) VisitString

func (dfs *Dfs[V]) VisitString(s *String) error

type ErrAccess

type ErrAccess struct {
	Accessor string
	Expected representation
	Actual   representation
}

func (ErrAccess) Error

func (e ErrAccess) Error() string

type ErrAsValue

type ErrAsValue struct {
	Expected representation
	Actual   representation
}

func (ErrAsValue) Error

func (e ErrAsValue) Error() string

type ErrCast

type ErrCast struct {
	Unsupported any
}

func (ErrCast) Error

func (e ErrCast) Error() string

type ErrUnmarshal

type ErrUnmarshal struct {
	Data []byte
}

func (ErrUnmarshal) Error

func (e ErrUnmarshal) Error() string

type IndexAccess

type IndexAccess int

func (IndexAccess) Accessing

func (i IndexAccess) Accessing(v JsonValue) (JsonValue, error)

type JsonValue

type JsonValue interface {
	json.Unmarshaler // TODO this cause pointer receiver
	json.Marshaler
	As
	Access
	AccessAs
	Accept
	Search
	// contains filtered or unexported methods
}

The interface of JSON(https://www.json.org/) value

func Cast

func Cast(v any) (JsonValue, error)

type KeyAccess

type KeyAccess string

func (KeyAccess) Accessing

func (k KeyAccess) Accessing(v JsonValue) (JsonValue, error)

type KeyIndexAccess

type KeyIndexAccess string

func (KeyIndexAccess) Accessing

func (ki KeyIndexAccess) Accessing(v JsonValue) (JsonValue, error)

type Null

type Null func(null)

func CastNull

func CastNull(n func(null)) (Null, error)

func (*Null) Accept

func (n *Null) Accept(visitor Visitor) error

func (*Null) Access

func (n *Null) Access(ptr ...Accessor) (JsonValue, error)

func (Null) AccessAsArray

func (n Null) AccessAsArray(ptr ...Accessor) (Array, error)

func (Null) AccessAsBool

func (n Null) AccessAsBool(ptr ...Accessor) (Bool, error)

func (Null) AccessAsNull

func (n Null) AccessAsNull(ptr ...Accessor) (Null, error)

func (Null) AccessAsNumber

func (n Null) AccessAsNumber(ptr ...Accessor) (Number, error)

func (Null) AccessAsObject

func (n Null) AccessAsObject(ptr ...Accessor) (Object, error)

func (Null) AccessAsString

func (n Null) AccessAsString(ptr ...Accessor) (String, error)

func (Null) AsArray

func (n Null) AsArray() (Array, error)

func (Null) AsBool

func (n Null) AsBool() (Bool, error)

func (Null) AsNull

func (n Null) AsNull() (Null, error)

func (Null) AsNumber

func (n Null) AsNumber() (Number, error)

func (Null) AsObject

func (n Null) AsObject() (Object, error)

func (Null) AsString

func (n Null) AsString() (String, error)

func (*Null) BreadthFirst

func (v *Null) BreadthFirst() iter.Seq2[Pointer, JsonValue]

func (*Null) DepthFirst

func (v *Null) DepthFirst() iter.Seq2[Pointer, JsonValue]

func (Null) IsArray

func (n Null) IsArray() bool

func (Null) IsBool

func (n Null) IsBool() bool

func (Null) IsNull

func (n Null) IsNull() bool

func (Null) IsNumber

func (n Null) IsNumber() bool

func (Null) IsObject

func (n Null) IsObject() bool

func (Null) IsString

func (n Null) IsString() bool

func (Null) MarshalJSON

func (n Null) MarshalJSON() ([]byte, error)

func (*Null) Slice

func (n *Null) Slice(acc SliceAccessor) ([]JsonValue, error)

func (Null) SliceAsArray

func (n Null) SliceAsArray(acc SliceAccessor) ([]Array, error)

func (Null) SliceAsBool

func (n Null) SliceAsBool(acc SliceAccessor) ([]Bool, error)

func (Null) SliceAsNull

func (n Null) SliceAsNull(acc SliceAccessor) ([]Null, error)

func (Null) SliceAsNumber

func (n Null) SliceAsNumber(acc SliceAccessor) ([]Number, error)

func (Null) SliceAsObject

func (n Null) SliceAsObject(acc SliceAccessor) ([]Object, error)

func (Null) SliceAsString

func (n Null) SliceAsString(acc SliceAccessor) ([]String, error)

func (*Null) UnmarshalJSON

func (n *Null) UnmarshalJSON(data []byte) error

type Number

type Number float64

func CastNumber

func CastNumber(n float64) (Number, error)

func (*Number) Accept

func (n *Number) Accept(visitor Visitor) error

func (*Number) Access

func (n *Number) Access(ptr ...Accessor) (JsonValue, error)

func (Number) AccessAsArray

func (n Number) AccessAsArray(ptr ...Accessor) (Array, error)

func (Number) AccessAsBool

func (n Number) AccessAsBool(ptr ...Accessor) (Bool, error)

func (Number) AccessAsNull

func (n Number) AccessAsNull(ptr ...Accessor) (Null, error)

func (Number) AccessAsNumber

func (n Number) AccessAsNumber(ptr ...Accessor) (Number, error)

func (Number) AccessAsObject

func (n Number) AccessAsObject(ptr ...Accessor) (Object, error)

func (Number) AccessAsString

func (n Number) AccessAsString(ptr ...Accessor) (String, error)

func (Number) AsArray

func (n Number) AsArray() (Array, error)

func (Number) AsBool

func (n Number) AsBool() (Bool, error)

func (Number) AsNull

func (n Number) AsNull() (Null, error)

func (Number) AsNumber

func (n Number) AsNumber() (Number, error)

func (Number) AsObject

func (n Number) AsObject() (Object, error)

func (Number) AsString

func (n Number) AsString() (String, error)

func (*Number) BreadthFirst

func (v *Number) BreadthFirst() iter.Seq2[Pointer, JsonValue]

func (*Number) DepthFirst

func (v *Number) DepthFirst() iter.Seq2[Pointer, JsonValue]

func (Number) IsArray

func (n Number) IsArray() bool

func (Number) IsBool

func (n Number) IsBool() bool

func (Number) IsNull

func (n Number) IsNull() bool

func (Number) IsNumber

func (n Number) IsNumber() bool

func (Number) IsObject

func (n Number) IsObject() bool

func (Number) IsString

func (n Number) IsString() bool

func (Number) MarshalJSON

func (n Number) MarshalJSON() ([]byte, error)

func (*Number) Slice

func (n *Number) Slice(acc SliceAccessor) ([]JsonValue, error)

func (Number) SliceAsArray

func (n Number) SliceAsArray(acc SliceAccessor) ([]Array, error)

func (Number) SliceAsBool

func (n Number) SliceAsBool(acc SliceAccessor) ([]Bool, error)

func (Number) SliceAsNull

func (n Number) SliceAsNull(acc SliceAccessor) ([]Null, error)

func (Number) SliceAsNumber

func (n Number) SliceAsNumber(acc SliceAccessor) ([]Number, error)

func (Number) SliceAsObject

func (n Number) SliceAsObject(acc SliceAccessor) ([]Object, error)

func (Number) SliceAsString

func (n Number) SliceAsString(acc SliceAccessor) ([]String, error)

func (*Number) UnmarshalJSON

func (n *Number) UnmarshalJSON(data []byte) error

type Object

type Object map[string]JsonValue

func CastObject

func CastObject(m map[string]any) (Object, error)

func (*Object) Accept

func (o *Object) Accept(visitor Visitor) error

func (*Object) Access

func (o *Object) Access(ptr ...Accessor) (JsonValue, error)

func (Object) AccessAsArray

func (o Object) AccessAsArray(ptr ...Accessor) (Array, error)

func (Object) AccessAsBool

func (o Object) AccessAsBool(ptr ...Accessor) (Bool, error)

func (Object) AccessAsNull

func (o Object) AccessAsNull(ptr ...Accessor) (Null, error)

func (Object) AccessAsNumber

func (o Object) AccessAsNumber(ptr ...Accessor) (Number, error)

func (Object) AccessAsObject

func (o Object) AccessAsObject(ptr ...Accessor) (Object, error)

func (Object) AccessAsString

func (o Object) AccessAsString(ptr ...Accessor) (String, error)

func (Object) AsArray

func (o Object) AsArray() (Array, error)

func (Object) AsBool

func (o Object) AsBool() (Bool, error)

func (Object) AsNull

func (o Object) AsNull() (Null, error)

func (Object) AsNumber

func (o Object) AsNumber() (Number, error)

func (Object) AsObject

func (o Object) AsObject() (Object, error)

func (Object) AsString

func (o Object) AsString() (String, error)

func (*Object) BreadthFirst

func (v *Object) BreadthFirst() iter.Seq2[Pointer, JsonValue]

func (*Object) DepthFirst

func (v *Object) DepthFirst() iter.Seq2[Pointer, JsonValue]

func (Object) IsArray

func (o Object) IsArray() bool

func (Object) IsBool

func (o Object) IsBool() bool

func (Object) IsNull

func (o Object) IsNull() bool

func (Object) IsNumber

func (o Object) IsNumber() bool

func (Object) IsObject

func (o Object) IsObject() bool

func (Object) IsString

func (o Object) IsString() bool

func (Object) MarshalJSON

func (o Object) MarshalJSON() ([]byte, error)

func (*Object) Slice

func (o *Object) Slice(acc SliceAccessor) ([]JsonValue, error)

func (Object) SliceAsArray

func (o Object) SliceAsArray(acc SliceAccessor) ([]Array, error)

func (Object) SliceAsBool

func (o Object) SliceAsBool(acc SliceAccessor) ([]Bool, error)

func (Object) SliceAsNull

func (o Object) SliceAsNull(acc SliceAccessor) ([]Null, error)

func (Object) SliceAsNumber

func (o Object) SliceAsNumber(acc SliceAccessor) ([]Number, error)

func (Object) SliceAsObject

func (o Object) SliceAsObject(acc SliceAccessor) ([]Object, error)

func (Object) SliceAsString

func (o Object) SliceAsString(acc SliceAccessor) ([]String, error)

func (*Object) UnmarshalJSON

func (o *Object) UnmarshalJSON(data []byte) error

type Pointer

type Pointer []Accessor

func (Pointer) Accessing

func (p Pointer) Accessing(v JsonValue) (JsonValue, error)

func (Pointer) PointerString

func (p Pointer) PointerString() (string, error)

type PointerVisitor

type PointerVisitor struct {
	BaseVisitor
	// contains filtered or unexported fields
}

func (*PointerVisitor) GetPointer

func (bv *PointerVisitor) GetPointer() Pointer

func (*PointerVisitor) SetPointer

func (bv *PointerVisitor) SetPointer(p Pointer)

type RootValue

type RootValue struct{ JsonValue }
Example (AsMethods)
package main

import (
	"encoding/json"
	"fmt"

	fluffyjson "github.com/hayas1/go-fluffy-json"
)

func main() {
	target := `{"hello":"world"}`
	var value fluffyjson.RootValue
	if err := json.Unmarshal([]byte(target), &value); err != nil {
		panic(err)
	}

	object, err := value.AccessAsObject()
	if err != nil {
		panic(err)
	}

	world, err := object["hello"].AccessAsString()
	if err != nil {
		panic(err)
	}

	match := world == "world"
	if !match {
		panic("not world")
	}

	fmt.Println(match)
}
Output:

true
Example (SwitchSyntax)
package main

import (
	"encoding/json"
	"fmt"

	fluffyjson "github.com/hayas1/go-fluffy-json"
)

func main() {
	target := `{"hello":"world"}`
	var value fluffyjson.RootValue
	if err := json.Unmarshal([]byte(target), &value); err != nil {
		panic(err)
	}

	switch object := value.JsonValue.(type) {
	// case SomeType:
	// 	panic("fail to compile: the interface is not implemented for SomeType basically")
	case *fluffyjson.Object:
		switch world := (*object)["hello"].(type) {
		case *fluffyjson.String:
			if match := *world == "world"; !match {
				panic("not world")
			} else {
				fmt.Println(match)
			}
		default:
			panic("not string")
		}
	default:
		panic("not object")
	}
}
Output:

true

func (*RootValue) Accept

func (v *RootValue) Accept(visitor Visitor) error

func (*RootValue) BreadthFirst

func (v *RootValue) BreadthFirst() iter.Seq2[Pointer, JsonValue]

func (*RootValue) DepthFirst

func (v *RootValue) DepthFirst() iter.Seq2[Pointer, JsonValue]
Example
package main

import (
	"encoding/json"
	"fmt"

	fluffyjson "github.com/hayas1/go-fluffy-json"
)

func main() {
	target := `[[[1,2],[3,4]],[[5,6],[7,8]]]`
	var value fluffyjson.RootValue
	if err := json.Unmarshal([]byte(target), &value); err != nil {
		panic(err)
	}

	var sum func(v fluffyjson.JsonValue) int
	sum = func(v fluffyjson.JsonValue) int {
		switch t := v.(type) {
		case *fluffyjson.Array:
			s := 0
			for _, vv := range *t {
				s += sum(vv)
			}
			return s
		case *fluffyjson.Number:
			return int(*t)
		default:
			panic("not array or number")
		}
	}
	results := make([]int, 0, 15)
	for _, v := range value.DepthFirst() {
		results = append(results, sum(v))
	}
	fmt.Println(results)
}
Output:

[36 10 3 1 2 7 3 4 26 11 5 6 15 7 8]

func (RootValue) MarshalJSON

func (v RootValue) MarshalJSON() ([]byte, error)
Example
package main

import (
	"fmt"

	fluffyjson "github.com/hayas1/go-fluffy-json"
)

func main() {
	v := fluffyjson.RootValue{&fluffyjson.Array{
		&[]fluffyjson.String{fluffyjson.String("hello")}[0],
		&[]fluffyjson.String{fluffyjson.String("world")}[0],
	}}
	b, err := v.MarshalJSON()
	if err != nil {
		panic(err)
	}
	fmt.Println(string(b))
}
Output:

["hello","world"]

func (*RootValue) UnmarshalJSON

func (v *RootValue) UnmarshalJSON(data []byte) error
Example
package main

import (
	"encoding/json"
	"fmt"

	fluffyjson "github.com/hayas1/go-fluffy-json"
)

func main() {
	var v struct {
		Fluffy fluffyjson.RootValue `json:"fluffy"`
	}
	if err := json.Unmarshal([]byte(`{"fluffy":{"deep":{"nested":{"json":{"value":["hello","world"]}}}}}`), &v); err != nil {
		panic(err)
	}

	pointer, err := fluffyjson.ParsePointer("/deep/nested/json/value/1")
	if err != nil {
		panic(err)
	}

	world, err := v.Fluffy.AccessAsString(pointer)
	if err != nil {
		panic(err)
	}
	fmt.Println(world)
}
Output:

world
type Search interface {
	DepthFirst() iter.Seq2[Pointer, JsonValue]
	BreadthFirst() iter.Seq2[Pointer, JsonValue]
}

type SliceAccess

type SliceAccess struct {
	Start int
	End   int
}

func (SliceAccess) Slicing

func (s SliceAccess) Slicing(v JsonValue) ([]JsonValue, error)

type SliceAccessor

type SliceAccessor interface {
	Slicing(JsonValue) ([]JsonValue, error)
}

type String

type String string

func CastString

func CastString(s string) (String, error)

func (*String) Accept

func (s *String) Accept(visitor Visitor) error

func (*String) Access

func (s *String) Access(ptr ...Accessor) (JsonValue, error)

func (String) AccessAsArray

func (s String) AccessAsArray(ptr ...Accessor) (Array, error)

func (String) AccessAsBool

func (s String) AccessAsBool(ptr ...Accessor) (Bool, error)

func (String) AccessAsNull

func (s String) AccessAsNull(ptr ...Accessor) (Null, error)

func (String) AccessAsNumber

func (s String) AccessAsNumber(ptr ...Accessor) (Number, error)

func (String) AccessAsObject

func (s String) AccessAsObject(ptr ...Accessor) (Object, error)

func (String) AccessAsString

func (s String) AccessAsString(ptr ...Accessor) (String, error)

func (String) AsArray

func (s String) AsArray() (Array, error)

func (String) AsBool

func (s String) AsBool() (Bool, error)

func (String) AsNull

func (s String) AsNull() (Null, error)

func (String) AsNumber

func (s String) AsNumber() (Number, error)

func (String) AsObject

func (s String) AsObject() (Object, error)

func (String) AsString

func (s String) AsString() (String, error)

func (*String) BreadthFirst

func (v *String) BreadthFirst() iter.Seq2[Pointer, JsonValue]

func (*String) DepthFirst

func (v *String) DepthFirst() iter.Seq2[Pointer, JsonValue]

func (String) IsArray

func (s String) IsArray() bool

func (String) IsBool

func (s String) IsBool() bool

func (String) IsNull

func (s String) IsNull() bool

func (String) IsNumber

func (s String) IsNumber() bool

func (String) IsObject

func (s String) IsObject() bool

func (String) IsString

func (s String) IsString() bool

func (String) MarshalJSON

func (s String) MarshalJSON() ([]byte, error)

func (*String) Slice

func (s *String) Slice(acc SliceAccessor) ([]JsonValue, error)

func (String) SliceAsArray

func (s String) SliceAsArray(acc SliceAccessor) ([]Array, error)

func (String) SliceAsBool

func (s String) SliceAsBool(acc SliceAccessor) ([]Bool, error)

func (String) SliceAsNull

func (s String) SliceAsNull(acc SliceAccessor) ([]Null, error)

func (String) SliceAsNumber

func (s String) SliceAsNumber(acc SliceAccessor) ([]Number, error)

func (String) SliceAsObject

func (s String) SliceAsObject(acc SliceAccessor) ([]Object, error)

func (String) SliceAsString

func (s String) SliceAsString(acc SliceAccessor) ([]String, error)

func (*String) UnmarshalJSON

func (s *String) UnmarshalJSON(data []byte) error

type ValueVisitor

type ValueVisitor struct {
	PointerVisitor
	// contains filtered or unexported fields
}

func (*ValueVisitor) VisitArray

func (vv *ValueVisitor) VisitArray(a *Array) error

func (*ValueVisitor) VisitBool

func (vv *ValueVisitor) VisitBool(b *Bool) error

func (*ValueVisitor) VisitNull

func (vv *ValueVisitor) VisitNull(n *Null) error

func (*ValueVisitor) VisitNumber

func (vv *ValueVisitor) VisitNumber(n *Number) error

func (*ValueVisitor) VisitObject

func (vv *ValueVisitor) VisitObject(o *Object) error

func (*ValueVisitor) VisitString

func (vv *ValueVisitor) VisitString(s *String) error

type Visitor

type Visitor interface {
	GetPointer() Pointer
	SetPointer(Pointer)
	VisitRoot(*RootValue) error
	LeaveRoot(*RootValue) error

	VisitObject(*Object) error
	VisitObjectEntry(string, JsonValue) error
	LeaveObjectEntry(string, JsonValue) error
	LeaveObject(*Object) error

	VisitArray(*Array) error
	VisitArrayEntry(int, JsonValue) error
	LeaveArrayEntry(int, JsonValue) error
	LeaveArray(*Array) error

	VisitString(*String) error
	VisitNumber(*Number) error
	VisitBool(*Bool) error
	VisitNull(*Null) error
}

Jump to

Keyboard shortcuts

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