Rand Stats

JSON::Path

zef:raku-community-modules

Actions Status Actions Status Actions Status

NAME

JSON::Path - Implementation of the JSONPath data structure query language

SYNOPSIS

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

DESCRIPTION

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.

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 (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).

AUTHOR

Jonathan Worthington

COPYRIGHT AND LICENSE

Copyright 2012 - 2024 Jonathan Worthington

Copyright 2024 Raku Community

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.