Documentation
¶
Overview ¶
Package jsonpointer implements read-only JSON Pointer (RFC 6901) traversal for Go values.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrInvalidIndex is returned when an array token is not a canonical index. ErrInvalidIndex = errors.New("invalid array index") // ErrIndexOutOfBounds is returned when an array index is outside the array. ErrIndexOutOfBounds = errors.New("array index out of bounds") // ErrKeyNotFound is returned when a map key is missing. ErrKeyNotFound = errors.New("map key not found") // ErrNilPointer is returned when traversal must dereference a nil pointer. ErrNilPointer = errors.New("cannot traverse through nil pointer") // ErrNotFound is returned when a value cannot be traversed. ErrNotFound = errors.New("not found") // ErrNoParent is returned when asking for the parent of the root pointer. ErrNoParent = errors.New("no parent") )
var ( // ErrInvalidPointer is returned when a JSON Pointer string is invalid. ErrInvalidPointer = errors.New("invalid pointer") )
Functions ¶
func EscapeToken ¶ added in v0.4.27
EscapeToken escapes a raw token for use inside a JSON Pointer string.
func IsArrayIndex ¶ added in v0.4.27
IsArrayIndex reports whether token is a canonical, representable array index.
func UnescapeToken ¶ added in v0.4.27
UnescapeToken decodes one JSON Pointer token.
func Value ¶ added in v0.4.27
Value parses pointer and resolves it against doc.
Example ¶
package main
import (
"fmt"
"log"
"github.com/kaptinlin/jsonpointer"
)
func main() {
doc := map[string]any{"name": "Alice"}
name, err := jsonpointer.Value(doc, "/name")
if err != nil {
log.Fatal(err)
}
fmt.Println(name)
}
Output: Alice
Types ¶
type Error ¶ added in v0.4.27
type Error struct {
// contains filtered or unexported fields
}
Error wraps a traversal failure with machine-readable pointer context.
func (*Error) Depth ¶ added in v0.4.27
Depth returns the zero-based token depth where the error occurred.
type Pointer ¶ added in v0.4.27
type Pointer struct {
// contains filtered or unexported fields
}
Pointer is an immutable RFC 6901 JSON Pointer.
func FromTokens ¶ added in v0.4.27
FromTokens builds a pointer from raw, unescaped token strings.
Example ¶
package main
import (
"fmt"
"github.com/kaptinlin/jsonpointer"
)
func main() {
p := jsonpointer.FromTokens("foo/bar", "tilde~key")
fmt.Println(p.String())
fmt.Println(p.Tokens())
}
Output: /foo~1bar/tilde~0key [foo/bar tilde~key]
func (Pointer) Reference ¶ added in v0.4.27
Reference resolves p against doc and returns value plus parent context.
Example ¶
package main
import (
"fmt"
"log"
"github.com/kaptinlin/jsonpointer"
)
func main() {
doc := map[string]any{
"foo/bar": map[string]any{
"tilde~key": "ready",
},
}
p, err := jsonpointer.Parse("/foo~1bar/tilde~0key")
if err != nil {
log.Fatal(err)
}
ref, err := p.Reference(doc)
if err != nil {
log.Fatal(err)
}
fmt.Println(ref.Value())
fmt.Println(ref.Token())
}
Output: ready tilde~key
func (Pointer) Value ¶ added in v0.4.27
Value resolves p against doc and returns the value.
Example ¶
package main
import (
"fmt"
"log"
"github.com/kaptinlin/jsonpointer"
)
func main() {
doc := map[string]any{
"users": []any{
map[string]any{"name": "Alice"},
},
}
p, err := jsonpointer.Parse("/users/0/name")
if err != nil {
log.Fatal(err)
}
name, err := p.Value(doc)
if err != nil {
log.Fatal(err)
}
fmt.Println(name)
}
Output: Alice
type Reference ¶
type Reference struct {
// contains filtered or unexported fields
}
Reference is a resolved value with its parent traversal context.
func ReferenceOf ¶ added in v0.4.27
ReferenceOf parses pointer and resolves it against doc with parent context.
func (Reference) Parent ¶ added in v0.4.27
Parent returns the parent container when the reference is not the root.
func (Reference) Pointer ¶ added in v0.4.27
Pointer returns the pointer that produced the reference.