PACKAGE

package gojsonpointer
    import "encoding/json/jsonpointer"


TYPES

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

func NewJsonPointer(jsonPointerString string) (JsonPointer, error)

func (p *JsonPointer) Get(document interface{}) (interface{}, reflect.Kind, error)
    Uses the pointer to retrieve a value from a JSON document

func (p *JsonPointer) Set(document interface{}, value interface{}) (interface{}, error)
    Uses the pointer to update a value from a JSON document

func (p *JsonPointer) String() string
    Pointer to string representation function


