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", "🗡️").SeqThe 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.