logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

JSON::Hyper - extract links from JSON via a schema

Author

       Toby Inkster <tobyink@cpan.org>.

Bugs

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

Description

       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.

Name

       JSON::Hyper - extract links from JSON via a schema

See Also

       JSON::Hyper::Link.

       Related modules: JSON::T, JSON::Path, JSON::GRDDL, JSON::Schema.

       <http://tools.ietf.org/html/draft-zyp-json-schema>.

Synopsis

        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});
        }

See Also