JSON::Path
The JSONPath query language was designed for indexing into JSON documents. It plays the same role as XPath does for XML documents.
This module implements JSON::Path
. However, it is not restricted to working
on JSON input. In fact, it will happily work over any data structure made up of
arrays and hashes.
Synopsis
# Example data.
my $data = {
kitchen => {
drawers => [
{ knife => '🔪' },
{ glass => '🍷' },
{ knife => '🗡️' },
]
}
};
# A query
my $jp = JSON::Path.new('$.kitchen.drawers[*].knife');
# The first result
dd $jp.value($data); # "🔪"
# All results.
dd $jp.values($data); # ("🔪", "🗡️").Seq
# All paths where the results were found.
dd $jp.paths($data); # ("\$.kitchen.drawers[0].knife",
# "\$.kitchen.drawers[2].knife").Seq
# Interleaved paths and values.
dd $jp.paths-and-values($data); # ("\$.kitchen.drawers[0].knife", "🔪",
# "\$.kitchen.drawers[2].knife", "🗡️").Seq
Query Syntax Summary
The following syntax is supported:
$ root node
.key index hash key
['key'] index hash key
[2] index array element
[0,1] index array slice
[4:5] index array range
[:5] index from the beginning
[-3:] index to the end
.* index all elements
[*] index all elements
[?(expr)] filter on (Perl 6) expression
..key search all descendants for hash key
A query that is not rooted from $
or specified using ..
will be evaluated
from the document root (that is, same as an explicit $
at the start).