table of contents
| JSON::Schema::Modern::Utilities(3pm) | User Contributed Perl Documentation | JSON::Schema::Modern::Utilities(3pm) |
NAME¶
JSON::Schema::Modern::Utilities - Internal utilities for JSON::Schema::Modern
VERSION¶
version 0.632
SYNOPSIS¶
use JSON::Schema::Modern::Utilities qw(func1 func2..);
DESCRIPTION¶
This class contains internal utilities to be used by JSON::Schema::Modern, and other useful helpers.
FUNCTIONS¶
is_type¶
if (is_type('string', $value)) { ... }
Returns a boolean indicating whether the provided value is of the specified core type ("null", "boolean", "string", "number", "object", "array") or "integer". Also optionally takes a hashref "{ legacy_ints =" 1 }> indicating that draft4 number semantics should apply (where unlike later drafts, 2.0 is not an integer).
get_type¶
my $type = get_type($value);
Returns one of the core types ("null", "boolean", "string", "number", "object", "array") or "integer". Also optionally takes a hashref "{ legacy_ints =" 1 }> indicating that draft4 number semantics should apply. Behaviour is consistent with "is_type".
is_bool¶
if (is_bool($value)) { ... }
Equivalent to "is_type('boolean', $value)". Accepts JSON booleans and builtin booleans, but not dualvars (because JSON encoders do not recognize these as booleans).
is_schema¶
if (is_schema($value)) { ... }
Equivalent to "is_type('object') || is_type('boolean')".
is_equal¶
if (not is_equal($x, $y, my $state = {})) {
say "values differ starting at $state->{path}: $state->{error}";
}
Compares two arbitrary data payloads for equality, as per Instance Equality in the JSON Schema draft2020-12 specification <https://json-schema.org/draft/2020-12/json-schema-core.html#rfc.section.4.2.2>.
The optional third argument hashref supports the following fields:
- "scalarref_booleans" (provided by caller input): as in "scalarref_booleans" in JSON::Schema::Modern
- "stringy_numbers" (provided by caller input): when set, strings will also be compared numerically, as in "stringy_numbers" in JSON::Schema::Modern
- "path" (populated by function): if result is false, the json pointer location of the first difference
- "error" (populated by function): if result is false, an error description of the first difference
is_elements_unique¶
if (not is_elements_unique($arrayref, my $state = {}) {
say "lists differ starting at $state->{path}: $state->{error}";
}
Compares all elements of an arrayref for uniqueness.
The optional second argument hashref supports the same options as "is_equal", plus:
- •
- "equal_indices" (populated by function): if result is false, the list of indices of the (first set of) equal items found.
jsonp¶
# '/paths/~1foo~1{foo_id}/get/responses'
my $jsonp = jsonp(qw(/paths /foo/{foo_id} get responses));
Constructs a json pointer string from a list of path components, with correct escaping; the first argument must be '' or an already-escaped json pointer, to which the rest of the path components are appended.
unjsonp¶
# ('', 'paths', '/foo/{foo_id}', 'get', 'responses')
my @components = unjsonp('/paths/~1foo~1{foo_id}/get/responses');
Splits a json pointer string into its path components, with correct unescaping.
jsonp_set¶
my $data = { a => 1, b => { c => 3, d => 4 } };
my $defaults = {
'/b/d' => 5,
'/b/e' => 6,
'/f' => 7,
'/g/h/i/1' => [ 10 ],
};
jsonp_set($data, $_, $defaults->{$_}) foreach keys %$defaults;
# data is now:
# { a => 1, b => { c => 3, d => 5, e => 6 }, f => 7, g => { h => { i => [ undef, [ 10 ] ] } } }
Given an arbitrary data structure, a json pointer string, and an arbitrary value, assigns that value to the given position in the data structure. This is a destructive operation, overwriting whatever data was there before if needed (even if an incompatible type: e.g. a hash key will overwrite an existing arrayref). Intermediary keys or indexes will spring into existence as needed.
json_pointer_type¶
A Type::Tiny type representing a json pointer string.
canonical_uri_type¶
A Type::Tiny type representing a canonical URI: a Mojo::URL with either no fragment, or with a json pointer fragment.
load_cached_document¶
my $evaluator = JSON::Schema::Modern->new; my $uri = 'https://json-schema.org/draft-07/schema#'; my $document = load_cached_document($evaluator, $uri); my $result = $evaluator->evaluate($data, $uri);
Loads a document object from global cache, loading data from disk if needed. This should only be used for officially-published schemas and metaschemas that are bundled with this distribution or another related one.
GIVING THANKS¶
If you found this module to be useful, please show your appreciation by adding a +1 in MetaCPAN <https://metacpan.org/dist/JSON-Schema-Modern> and a star in GitHub <https://github.com/karenetheridge/JSON-Schema-Modern>.
SUPPORT¶
Bugs may be submitted through <https://github.com/karenetheridge/JSON-Schema-Modern/issues>.
I am also usually active on irc, as 'ether' at "irc.perl.org" and "irc.libera.chat".
You can also find me on the JSON Schema Slack server <https://json-schema.slack.com> and OpenAPI Slack server <https://open-api.slack.com>, which are also great resources for finding help.
AUTHOR¶
Karen Etheridge <ether@cpan.org>
COPYRIGHT AND LICENCE¶
This software is copyright (c) 2020 by Karen Etheridge.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
Some schema files have their own licence, in share/LICENSE.
| 2026-01-18 | perl v5.40.1 |