Documentation ¶
Overview ¶
Package gjson provides searching for json strings.
Index ¶
- Variables
- func AddModifier(name string, fn func(json, arg string) string)
- func ForEachLine(json string, iterator func(line Result) bool)
- func ModifierExists(name string, fn func(json, arg string) string) bool
- func Unmarshal(data []byte, v interface{}) errordeprecated
- func UnmarshalValidationEnabled(enabled bool)deprecated
- func Valid(json string) bool
- func ValidBytes(json []byte) bool
- type Result
- func (t Result) Array() []Result
- func (t Result) Bool() bool
- func (t Result) Exists() bool
- func (t Result) Float() float64
- func (t Result) ForEach(iterator func(key, value Result) bool)
- func (t Result) Get(path string) Result
- func (t Result) Int() int64
- func (t Result) IsArray() bool
- func (t Result) IsObject() bool
- func (t Result) Less(token Result, caseSensitive bool) bool
- func (t Result) Map() map[string]Result
- func (t Result) String() string
- func (t Result) Time() time.Time
- func (t Result) Uint() uint64
- func (t Result) Value() interface{}
- type Type
Constants ¶
This section is empty.
Variables ¶
var DisableChaining = false
DisableChaining will disable the chaining (pipe) syntax
var DisableModifiers = false
DisableModifiers will disable the modifier syntax
Functions ¶
func AddModifier ¶ added in v1.2.0
AddModifier binds a custom modifier command to the GJSON syntax. This operation is not thread safe and should be executed prior to using all other gjson function.
func ForEachLine ¶ added in v1.1.0
ForEachLine iterates through lines of JSON as specified by the JSON Lines format (http://jsonlines.org/). Each line is returned as a GJSON Result.
func ModifierExists ¶ added in v1.2.0
ModifierExists returns true when the specified modifier exists.
func Unmarshal
deprecated
Unmarshal loads the JSON data into the value pointed to by v.
This function works almost identically to json.Unmarshal except that gjson.Unmarshal will automatically attempt to convert JSON values to any Go type. For example, the JSON string "100" or the JSON number 100 can be equally assigned to Go string, int, byte, uint64, etc. This rule applies to all types.
Deprecated: Use encoder/json.Unmarshal instead
func UnmarshalValidationEnabled
deprecated
func UnmarshalValidationEnabled(enabled bool)
UnmarshalValidationEnabled provides the option to disable JSON validation during the Unmarshal routine. Validation is enabled by default.
Deprecated: Use encoder/json.Unmarshal instead
func Valid ¶
Valid returns true if the input is valid json.
if !gjson.Valid(json) { return errors.New("invalid json") } value := gjson.Get(json, "name.last")
func ValidBytes ¶ added in v1.1.1
ValidBytes returns true if the input is valid json.
if !gjson.Valid(json) { return errors.New("invalid json") } value := gjson.Get(json, "name.last")
If working with bytes, this method preferred over Valid(string(data))
Types ¶
type Result ¶
type Result struct { // Type is the json type Type Type // Raw is the raw json Raw string // Str is the json string Str string // Num is the json number Num float64 // Index of raw value in original json, zero means index unknown Index int }
Result represents a json value that is returned from Get().
func Get ¶
Get searches json for the specified path. A path is in dot syntax, such as "name.last" or "age". When the value is found it's returned immediately.
A path is a series of keys searated by a dot. A key may contain special wildcard characters '*' and '?'. To access an array value use the index as the key. To get the number of elements in an array or to access a child path, use the '#' character. The dot and wildcard character can be escaped with '\'.
{ "name": {"first": "Tom", "last": "Anderson"}, "age":37, "children": ["Sara","Alex","Jack"], "friends": [ {"first": "James", "last": "Murphy"}, {"first": "Roger", "last": "Craig"} ] } "name.last" >> "Anderson" "age" >> 37 "children" >> ["Sara","Alex","Jack"] "children.#" >> 3 "children.1" >> "Alex" "child*.2" >> "Jack" "c?ildren.0" >> "Sara" "friends.#.first" >> ["James","Roger"]
This function expects that the json is well-formed, and does not validate. Invalid json will not panic, but it may return back unexpected results. If you are consuming JSON from an unpredictable source then you may want to use the Valid function first.
func GetBytes ¶
GetBytes searches json for the specified path. If working with bytes, this method preferred over Get(string(data), path)
func GetMany ¶
GetMany searches json for the multiple paths. The return value is a Result array where the number of items will be equal to the number of input paths.
func GetManyBytes ¶
GetManyBytes searches json for the multiple paths. The return value is a Result array where the number of items will be equal to the number of input paths.
func Parse ¶
Parse parses the json and returns a result.
This function expects that the json is well-formed, and does not validate. Invalid json will not panic, but it may return back unexpected results. If you are consuming JSON from an unpredictable source then you may want to use the Valid function first.
func ParseBytes ¶
ParseBytes parses the json and returns a result. If working with bytes, this method preferred over Parse(string(data))
func (Result) Array ¶
Array returns back an array of values. If the result represents a non-existent value, then an empty array will be returned. If the result is not a JSON array, the return value will be an array containing one result.
func (Result) Exists ¶
Exists returns true if value exists.
if gjson.Get(json, "name.last").Exists(){ println("value exists") }
func (Result) ForEach ¶
ForEach iterates through values. If the result represents a non-existent value, then no values will be iterated. If the result is an Object, the iterator will pass the key and value of each item. If the result is an Array, the iterator will only pass the value of each item. If the result is not a JSON array or object, the iterator will pass back one value equal to the result.
func (Result) Get ¶
Get searches result for the specified path. The result should be a JSON array or object.
func (Result) Less ¶
Less return true if a token is less than another token. The caseSensitive paramater is used when the tokens are Strings. The order when comparing two different type is:
Null < False < Number < String < True < JSON