JSON::Hyper(3pm)

JSON::Hyper3pm

Extract links from json via a schema

Usage

 my $hyper = JSON::Hyper->new($hyperschema);
 my $json  = from_json( ... );
 my @links = $hyper->find_links($json->[1]->{some}->{object});
 foreach my $link (@links)
 {
   printf("<%s> (%s)", $link->{href}, $link->{rel});
 }

Overview

The JSON Hyper Schema proposal defines hypertext navigation through data structures represented by JSON.

Constructor

"new($hyperschema)"

Given a JSON (or equivalent Perl nested hashref/arrayref structure) Hyper Schema, returns a Perl object capable of interpreting that schema.

If the schema is omitted, defaults to the JSON Referencing hyper schema (described at <http://json-schema.org/json-ref>)

Methods

"schema"

Returns the original schema as a hashref/arrayref structure.

"ua"

Get/set the LWP::UserAgent instance used to retrieve things.

"find_links($object, $base)"

Given a JSON object (or equivalent Perl nested hashref/arrayref structure) and optionally a base URL for interpreting relative URI references, returns a list of links found on object node. Does not operate recursively.

Each link is a JSON::Hyper::Link object.

"get($uri)"

Performs an HTTP request for the given URI and returns a list of Perl nested hashref/arrayref structures corresponding to the JSON response. The URI may contain a fragment identifier, which will be interpreted according to the schema's fragment resolution method. Fragment resolution methods supported include:

•

slash-delimited (default)

•

dot-delimited

•

jsonpath

For example, assuming the hyper schema specifies slash-delimited fragments, the following:

 my $hyper    = JSON::Hyper->new($hyperschema);
 my ($result) = $hyper->get('http://example.com/data.json#foo/bar/0');

Is roughly equivalent to:

 use JSON;
 use LWP::UserAgent;
 my $ua       = LWP::UserAgent->new;
 my $response = $ua->get('http://example.com/data.json');
 my $object   = from_json($response->decoded_content);
 my $result   = $object->{foo}{bar}[0];

Note, if called multiple times on the same URL will return not just equivalent objects, but the same object.

So, why does this method return a list of results instead of just a single result? In most cases, there will be either 0 or 1 items on the list; however, JSONPath allows a path to match multiple nodes, so there will occasionally be more than one result. (In scalar context, this method just returns the first result anyway.)

"resolve_fragment($object, $fragment)"

Used by "get" to resolve the fragment part of a URL against an object.

"process_includes($object, $base, $recurse)"

Given an JSON object (or equivalent Perl nested hashref/arrayref structure) and optional base URL, crawls the object finding rel="full" links, dereferences them using "get" and replaces the appropriate nodes with the retrieved content. $recurse is a boolean.

This has the effect of rel="full" behaving like inclusion does in various programming languages.

This modifies the given object rather than creating a new object.

Utilities

"JSON::Hyper::json_ref()"

Returns the JSON referencing hyperschema as a hashref.

Releases

3 releases since Debian 11 (Bullseye); the text changed 1 time.

  1. 11
  2. 12–13

Bugs

Please report any bugs to <http://rt.cpan.org/>.

Author

Toby Inkster <[email protected]>.

From libjson-hyper-perl 0.011-3 in Debian 13 (Trixie). Parsed by carta from the page's man source.