Commit Graph

105 Commits

Author SHA1 Message Date
Josh Baker
2e78916f4a option to disable validation 2017-05-08 17:47:46 -07:00
Josh Baker
2555fc0b61 Unmarshal Validation
The Unmarshal function now returns an error if the JSON is not valid.
2017-05-08 17:33:03 -07:00
Josh Baker
0bedaf01cb updated wording 2017-05-08 07:47:07 -07:00
Josh Baker
371acf8f0c updated wording 2017-05-08 07:40:56 -07:00
Josh Baker
19194a58d8 typos 2017-05-08 06:55:29 -07:00
Josh Baker
3f5adf1ba9 New gjson.Unmarshal function
It's a drop in replacement for json.Unmarshal and you can typically see
a 3 to 4 times boost in performance without the need for external tools
or generators.

This function works almost identically to json.Unmarshal except that
it expects the json to be well-formed prior to being called. Invalid
json will not panic, but it may return back unexpected results.
Therefore the return value of this function will always be nil.

Another difference is 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.
2017-05-07 18:26:54 -07:00
Josh Baker
e30a9c1037 Default String() to empty when nonexistent or null
This commit alters the behavior of string handling.

Prior to this change, calling result.String() for nonexistent and null
JSON members would return "null". This runs counter to the zero and omitempty
defaults of Go. Thus I've been seeing in the wild:

    s := result.String()
    if s == "null" || s == "" {
        // ... handle empty string condition
    }

Now we can simply write:

    if result.String() == "" {
        // ... handle empty string condition
    }

It's still possible to explicitly check for null and existence.

    result.Type == gjson.Null
    result.Exists()
2017-04-18 09:28:51 -07:00
Josh Baker
039b641eab added result.Time() function 2017-04-14 17:58:25 -07:00
Josh Baker
6e0babc7e8 updated benchmarks, added features list 2017-04-14 11:13:32 -07:00
Josh Baker
a8ccb8767a mention "values" 2017-04-12 14:16:56 -07:00
Josh Baker
7d884e04ac minor update 2017-04-12 14:14:42 -07:00
Josh Baker
7c63fbd56a better test coverage 2017-04-11 08:54:19 -07:00
Josh Baker
92a0497357 reduced some complexity 2017-04-10 20:45:34 -07:00
Josh Baker
766ad13f76 minor updates 2017-04-10 12:26:09 -07:00
Josh Baker
9c689b0be6 cleanup benchmarks 2017-04-10 11:41:37 -07:00
Josh Baker
635226ae42 minor format updates 2017-04-10 11:41:19 -07:00
Josh Baker
20d521de6e added emoji test 2017-04-09 19:40:55 -07:00
Josh Baker
01736e2faf inlined unicode decoding 2017-04-05 10:22:45 -07:00
Josh Baker
458c2c85b8 reorg imports 2017-04-04 10:46:00 -07:00
Josh Baker
e0cd4f26a8 proper emoji decoding, fixed #23 2017-04-04 10:42:36 -07:00
Josh Baker
8f291465f6 added Exists() to the list of handy functions 2017-04-02 10:13:06 -07:00
Josh Baker
e8d1a9ab93 end of path regression, fixes #21
thanks @Poorva17
2017-03-29 08:19:50 -07:00
Josh Baker
9944282cf6 updated comments 2017-03-29 08:18:26 -07:00
Josh Baker
256887a8aa Fix for invalid matching on prefixed key
Thanks to @Poorva17 for finding this issue.
Fixes #20
2017-03-28 17:04:10 -07:00
Josh Baker
09d1c5c5bc added gjson-safe comment 2017-02-05 09:10:42 -07:00
Josh Baker
e3f249f4fd Missing package alias 2016-12-16 09:22:41 -07:00
Josh Baker
b0e589ad0b index for iterator vals 2016-12-08 15:00:05 -07:00
Josh Baker
456225d161 key index for ForEach 2016-12-07 16:37:33 -07:00
Josh Baker
c1e65a498d added ParseBytes 2016-12-02 11:59:39 -07:00
Josh Baker
1a8de7c426 add query operators 2016-12-02 11:53:14 -07:00
Josh Baker
7afd24f7a2 added != comparison operator 2016-11-30 14:38:08 -07:00
Josh Baker
90669a0cbe query matching with % 2016-11-30 14:32:17 -07:00
Josh Baker
6fd75099ef Update README.md 2016-11-30 12:04:48 -07:00
Josh Baker
62892351c5 added ForEach function 2016-11-30 10:50:59 -07:00
Josh Baker
86b1b630e4 Query array for multiple matches
It's now possible to query an array for multiple matches by adding the
'#' character immediately following the query.

For example, using the following JSON:

  {
    "friends": [
      {"first": "Dale", "last": "Murphy"},
      {"first": "Roger", "last": "Craig"},
      {"first": "Jane", "last": "Murphy"}
    ]
  }

To return the first match:

  `friends.#[last="Murphy"].first` >> "Dale"

To return all matches:

  `friends.#[last="Murphy"]#.first` >> ["Dale","Jane"]

Thanks to @chuttam for requesting this feature, closes #15.
2016-11-30 07:59:24 -07:00
Josh Baker
1303e83611 fix lead comma error 2016-11-29 18:08:02 -07:00
Josh Baker
1a15b54bbb add bookmark link for GetMany 2016-11-28 19:04:18 -07:00
Josh Baker
ae5d307631 Added GetMany. Query many paths at once.
The `GetMany(json, paths...)` function can be used to get multiple
values at one time from the same json string.
This is preferrable to calling `Get(json, path)` over and over.
It's also optimized to scan over a JSON payload once.

This addresses a feature request by @FZambia, and closes #13.
2016-11-28 15:10:11 -07:00
Josh Baker
72b0cad1c1 example getting raw bytes, closes #12 2016-11-04 19:41:23 -07:00
Josh Baker
ac4cd1ab55 empty arrays for non-existent values #11 2016-11-02 13:45:25 -07:00
Josh Baker
1584ec68ff Merge branch 'wI2L-master' 2016-11-02 12:45:57 -07:00
William Poussier
495633298f Modify behavior of Array() on non-array result.
Closes #10.
2016-11-02 20:20:24 +01:00
Josh Baker
b95abbe94a removed obsolete field 2016-11-02 11:01:06 -07:00
Josh Baker
a02d704254 added result.Uint() function resolves #9 2016-11-02 08:24:13 -07:00
Josh Baker
78babc5712 typo 2016-10-30 14:35:08 -07:00
Josh Baker
bc89b871de typos 2016-10-28 10:56:10 -07:00
Josh Baker
95c6f92c50 mention GetBytes function 2016-10-28 09:07:48 -07:00
Josh Baker
5fdbb97fe1 mention jsoned 2016-10-25 22:03:43 -07:00
Josh Baker
27c108f475 fuzzing test on parse 2016-10-18 17:13:15 -07:00
Josh Baker
800ce5e927 added Index field 2016-10-17 17:39:27 -07:00