JSON::Path - Implementation of the JSONPath data structure query language
use JSON::Path;
# 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
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.
The following syntax is supported:
query | description |
---|---|
$ | 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 (Raku) 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).
- Jonathan Worthington
Source can be located at: https://github.com/raku-community-modules/JSON-Path . Comments and Pull Requests are welcome.
Copyright 2012 - 2024 Jonathan Worthington
Copyright 2024 - 2025 Raku Community
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.