Jq: Difference between revisions
From wikinotes
No edit summary |
|||
Line 44: | Line 44: | ||
jq '.[1]' # obj[1] | jq '.[1]' # obj[1] | ||
jq '.[5:10]' # list-items 5-10 | jq '.[5:10]' # list-items 5-10 | ||
jq '.[] | select(.name == "foo") # all dicts in list where name=="foo" | |||
jq '.[].name | select(startswith("foo"))' # all name keys from dicts that start with "foo" | |||
</syntaxhighlight> | </syntaxhighlight> | ||
</blockquote><!-- Filters --> | </blockquote><!-- Filters --> |
Revision as of 03:01, 29 August 2021
parse json on the commandline.
This is just a cookbook - the official docs are excellent.
Documentation
official docs https://stedolan.github.io/jq/manual/ basic filters docs https://stedolan.github.io/jq/manual/#Basicfilters homepage https://stedolan.github.io/jq/
Usage
Basics
# print w/ syntaxhighlighting echo '{"one": 1, "two": {"a": "A"}}' | jq # get key ["one"] echo '{"one": 1, "two": {"a": "A"}}' | jq '.one' # 1 # get nested-key ["two"]["a"] echo '{"one": 1, "two": {"a": "A"}}' | jq '.two.a' # "A" # get list item at index 1 echo '["a", "b", "c"]' | jq '.[1]' # "b"Filters
jq '.' # obj jq '.one' # obj["one"] jq '.one?' # obj["one"] (but no error if not exist) jq '.one.two' # obj["one"]["two"] jq '.[1]' # obj[1] jq '.[5:10]' # list-items 5-10 jq '.[] | select(.name == "foo") # all dicts in list where name=="foo" jq '.[].name | select(startswith("foo"))' # all name keys from dicts that start with "foo"Expressions
Selections within
()
are evaluated as expressionsOperators
Used in expressions
+ - * / %Transform
You can compose new objects from the input object.
jq '{"fullname": (.firstname + .lastname)}'Comments
Neither json nor
jq
support comments.
It's hacky, but you could pre-process the object to strip them, however.echo '{ // syntax-highlight as javascript "local_path": "/home/you", // your home dir // a network path "netwk_path": "//10.1.0.5/music" }' \ | sed 's?//[^"]*$??' | jq '.one'