1package jmespath 2 3import "strconv" 4 5// JMESPath is the epresentation of a compiled JMES path query. A JMESPath is 6// safe for concurrent use by multiple goroutines. 7type JMESPath struct { 8 ast ASTNode 9 intr *treeInterpreter 10} 11 12// Compile parses a JMESPath expression and returns, if successful, a JMESPath 13// object that can be used to match against data. 14func Compile(expression string) (*JMESPath, error) { 15 parser := NewParser() 16 ast, err := parser.Parse(expression) 17 if err != nil { 18 return nil, err 19 } 20 jmespath := &JMESPath{ast: ast, intr: newInterpreter()} 21 return jmespath, nil 22} 23 24// MustCompile is like Compile but panics if the expression cannot be parsed. 25// It simplifies safe initialization of global variables holding compiled 26// JMESPaths. 27func MustCompile(expression string) *JMESPath { 28 jmespath, err := Compile(expression) 29 if err != nil { 30 panic(`jmespath: Compile(` + strconv.Quote(expression) + `): ` + err.Error()) 31 } 32 return jmespath 33} 34 35// Search evaluates a JMESPath expression against input data and returns the result. 36func (jp *JMESPath) Search(data interface{}) (interface{}, error) { 37 return jp.intr.Execute(jp.ast, data) 38} 39 40// Search evaluates a JMESPath expression against input data and returns the result. 41func Search(expression string, data interface{}) (interface{}, error) { 42 intr := newInterpreter() 43 parser := NewParser() 44 ast, err := parser.Parse(expression) 45 if err != nil { 46 return nil, err 47 } 48 return intr.Execute(ast, data) 49} 50