|
NAMEJSON::Pointer - A Perl implementation of JSON Pointer (RFC6901) VERSIONThis document describes JSON::Pointer version 0.07. SYNOPSIS use JSON::Pointer;
my $obj = {
foo => 1,
bar => [ { qux => "hello" }, 3 ],
baz => { boo => [ 1, 3, 5, 7 ] }
};
JSON::Pointer->get($obj, "/foo"); ### $obj->{foo}
JSON::Pointer->get($obj, "/bar/0"); ### $obj->{bar}[0]
JSON::Pointer->get($obj, "/bar/0/qux"); ### $obj->{bar}[0]{qux}
JSON::Pointer->get($obj, "/bar/1"); ### $obj->{bar}[1]
JSON::Pointer->get($obj, "/baz/boo/2"); ### $obj->{baz}{boo}[2]
DESCRIPTIONThis library is implemented JSON Pointer (<http://tools.ietf.org/html/rfc6901>) and some useful operator from JSON Patch (<http://tools.ietf.org/html/rfc6902>). JSON Pointer is available to identify a specified value in JSON document, and it is simillar to XPath. Please read the both of specifications for details. METHODSget($document :HashRef/ArrayRef/Scalar, $pointer :Str, $strict :Int) :Scalar
Get specified value identified by $pointer from $document. For example, use JSON::Pointer;
print JSON::Pointer->get({ foo => 1, bar => { "qux" => "hello" } }, "/bar/qux"); ### hello
get_relative($document :HashRef/ArrayRef/Scalar, $current_pointer :Str, $relative_pointer :Str, $strict :Int) :ScalarThis method is highly EXPERIMENTAL. Because this method depends on <http://tools.ietf.org/html/draft-luff-relative-json-pointer-00> draft spec.
contains($document :HashRef/ArrayRef/Scalar, $pointer :Str) :Int
Return which the target location identified by $pointer exists or not in the $document. use JSON::Pointer;
my $document = { foo => 1 };
if (JSON::Pointer->contains($document, "/foo")) {
print "/foo exists";
}
add($document :HashRef/ArrayRef/Scalar, $pointer :Str, $value :HashRef/ArrayRef/Scalar) :HashRef/ArrayRef/Scalar
Add specified $value on target location identified by $pointer in the $document. For example, use JSON::Pointer;
my $document = +{ foo => 1, };
my $value = +{ qux => "hello" };
my $patched_document = JSON::Pointer->add($document, "/bar", $value);
print $patched_document->{bar}{qux}; ### hello
remove($document, $pointer) :Array/Scalar
Remove target location identified by $pointer in the $document. use JSON::Pointer;
my $document = { foo => 1 };
my $patched_document = JSON::Pointer->remove($document, "/foo");
unless (exists $patched_document->{foo}) {
print "removed /foo";
}
This method is contextial return value. When the return value of wantarray equals true, return $patched_document and $removed_value, or not return $patched_document only. replace($document :HashRef/ArrayRef/Scalar, $pointer :Str, $value :HashRef/ArrayRef/Scalar) :Array/HashRef/ArrayRef/Scalar
Replace the value of target location specified by $pointer to the $value in the $document. use JSON::Pointer;
my $document = { foo => 1 };
my $patched_document = JSON::Pointer->replace($document, "/foo", 2);
print $patched_document->{foo}; ## 2
This method is contextial return value. When the return value of wantarray equals true, return $patched_document and $replaced_value, or not return $patched_document only. set($document :HashRef/ArrayRef/Scalar, $pointer :Str, $value :HashRef/ArrayRef/Scalar) :Array/HashRef/ArrayRef/ScalarThis method is alias of replace method. copy($document :HashRef/ArrayRef/Scalar, $from_pointer :Str, $to_pointer :Str) :HashRef/ArrayRef/Scalar
Copy the value identified by $from_pointer to target location identified by $to_pointer. For example, use JSON::Pointer;
my $document = +{ foo => [ { qux => "hello" } ], bar => [ 1 ] };
my $patched_document = JSON::Pointer->copy($document, "/foo/0/qux", "/bar/-");
print $patched_document->{bar}[1]; ## hello
Note that "-" notation means next of last element in the array. In this example, "-" means 1. move($document :HashRef/ArrayRef/Scalar, $from_pointer :Str, $to_pointer :Str) :HashRef/ArrayRef/Scalar
Move the value identified by $from_pointer to target location identified by $to_pointer. For example, use JSON;
use JSON::Pointer;
my $document = +{ foo => [ { qux => "hello" } ], bar => [ 1 ] };
my $patched_document = JSON::Pointer->move($document, "/foo/0/qux", "/bar/-");
print encode_json($patched_document); ## {"bar":[1,"hello"],"foo":[{}]}
test($document :HashRef/ArrayRef/Scalar, $pointer :Str, $value :HashRef/ArrayRef/Scalar) :Int
Return which the value identified by $pointer equals $value or not in the $document. This method distinguish type of each values. use JSON::Pointer;
my $document = { foo => 1 };
print JSON::Pointer->test($document, "/foo", 1); ### 1
print JSON::Pointer->test($document, "/foo", "1"); ### 0
traverse($document, $pointer, $opts) : JSON::Pointer::ContextThis method is used as internal implementation only. DEPENDENCIESPerl 5.8.1 or later. BUGSAll complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT. SEE ALSO
AUTHORToru Yamaguchi <zigorou at cpan.org> LICENSE AND COPYRIGHTCopyright (c) 2013, Toru Yamaguchi. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
|