2022-11-16 05:11:19 +03:00
|
|
|
package json
|
|
|
|
|
|
|
|
import (
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"go.neonxp.dev/json/model"
|
|
|
|
"go.neonxp.dev/json/parser"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Marshal Node tree to []byte
|
2022-11-21 04:31:56 +03:00
|
|
|
func Marshal(node model.Node) ([]byte, error) {
|
2022-11-16 05:11:19 +03:00
|
|
|
return node.MarshalJSON()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Unmarshal data to Node tree
|
2022-11-21 04:31:56 +03:00
|
|
|
func Unmarshal(data []byte) (model.Node, error) {
|
2022-11-16 05:11:19 +03:00
|
|
|
return parser.Parse(string(data))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Query returns node by query string (dot notation)
|
2022-11-21 04:31:56 +03:00
|
|
|
func Query(json string, query string) (model.Node, error) {
|
2022-11-16 05:11:19 +03:00
|
|
|
n, err := parser.Parse(json)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2022-11-21 04:31:56 +03:00
|
|
|
return model.Query(n, strings.Split(query, "."))
|
2022-11-16 05:11:19 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// QueryArray returns node by array query
|
2022-11-21 04:31:56 +03:00
|
|
|
func QueryArray(json string, query []string) (model.Node, error) {
|
2022-11-16 05:11:19 +03:00
|
|
|
n, err := parser.Parse(json)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2022-11-21 04:31:56 +03:00
|
|
|
return model.Query(n, query)
|
2022-11-16 05:11:19 +03:00
|
|
|
}
|