Documentation
¶
Overview ¶
Package jsonpath implements Stefan Goener's JSONPath http://goessner.net/articles/JsonPath/
A jsonpath applies to any JSON decoded data using interface{} when decoded with encoding/json (http://golang.org/pkg/encoding/json/) :
var bookstore interface{}
err := json.Unmarshal(data, &bookstore)
authors, err := jsonpath.Read(bookstore, "$..authors")
A jsonpath expression can be prepared to be reused multiple times :
allAuthors, err := jsonpath.Prepare("$..authors")
...
var bookstore interface{}
err = json.Unmarshal(data, &bookstore)
authors, err := allAuthors(bookstore)
The type of the values returned by the `Read` method or `Prepare` functions depends on the jsonpath expression.
Limitations ¶
No support for subexpressions and filters. Strings in brackets must use double quotes. It cannot operate on JSON decoded struct fields.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Read ¶
Read a path from a decoded JSON array or object ([]interface{} or map[string]interface{}) and returns the corresponding value or an error.
The returned value type depends on the requested path and the JSON value.
Example ¶
package main
import (
"encoding/json"
"fmt"
"github.com/yalp/jsonpath"
)
func main() {
raw := []byte(`{"hello":"world"}`)
var data interface{}
json.Unmarshal(raw, &data)
out, err := jsonpath.Read(data, "$.hello")
if err != nil {
panic(err)
}
fmt.Print(out)
}
Output: world
Types ¶
type FilterFunc ¶
type FilterFunc func(value interface{}) (interface{}, error)
FilterFunc applies a prepared json path to a JSON decoded value
func Prepare ¶
func Prepare(path string) (FilterFunc, error)
Prepare will parse the path and return a filter function that can then be applied to decoded JSON values.
Example ¶
package main
import (
"encoding/json"
"fmt"
"github.com/yalp/jsonpath"
)
func main() {
raw := []byte(`{"hello":"world"}`)
helloFilter, err := jsonpath.Prepare("$.hello")
if err != nil {
panic(err)
}
var data interface{}
if err = json.Unmarshal(raw, &data); err != nil {
panic(err)
}
out, err := helloFilter(data)
if err != nil {
panic(err)
}
fmt.Print(out)
}
Output: world