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