NAME
JSON::MultiValueOrdered - handle JSON like {"a":1, "a":2}
SYNOPSIS
use Test::More tests => 4;
use JSON::MultiValueOrdered;
my $j = JSON::MultiValueOrdered->new;
isa_ok $j, 'JSON::Tiny';
my $data = $j->decode(<<'JSON');
{
"a": 1,
"b": 2,
"a": 3,
"b": 4
}
JSON
# As you'd expect, for repeated values, the last value is used
is_deeply(
$data,
{ a => 3, b => 4 },
);
# But hashes within the structure are tied to Tie::Hash::MultiValueOrdered
is_deeply(
[ tied(%$data)->get('b') ],
[ 2, 4 ],
);
# And the extra information from the tied hash is used when re-encoding
is(
$j->encode($data),
q({"a":1,"b":2,"a":3,"b":4}),
);
done_testing;
DESCRIPTION
The JSON specification allows keys to be repeated within objects. It
remains silent on how repeated keys should be interpreted. Most JSON
implementations end up choosing just one of the values; sometimes the
first, sometimes the last.
JSON::MultiValueOrdered is a subclass of JSON::Tiny which treats objects
as ordered lists of key-value pairs, with duplicate keys allowed. It
achieves this by returning all hashes as tied using
Tie::Hash::MultiValueOrdered. While these hashes behave like standard Perl
hashes (albeit while preserving the original order of the keys), they
provide a tied object interface allowing you to retrieve additional values
for each key.
JSON::MultiValueOrdered serialisation also serialises these additional
values and preserves order.
JSON::MultiValueOrdered is a subclass of JSON::Tiny::Subclassable and
JSON::Tiny, which is itself a fork of Mojo::JSON. Except where noted, the
methods listed below behave identically to the methods of the same names
in the superclasses.
Constructor
`new(%attributes)`
Attributes
`pretty`
`error`
Methods
`decode($bytes)`
`encode($ref)`
`false`
`true`
Functions
`j(\@array)` / `j(\%hash)` / `j($bytes)`
Encode or decode JSON as applicable.
This function may be exported, but is not exported by default. You may
request to import it with a different name:
use JSON::MultiValueOrdered j => { -as => 'quick_json' };
BUGS
Please report any bugs to
<http://rt.cpan.org/Dist/Display.html?Queue=JSON-MultiValueOrdered>.
SEE ALSO
JSON::Tiny::Subclassable, JSON::Tiny, Mojo::JSON.
Tie::Hash::MultiValueOrdered.
AUTHOR
Toby Inkster <tobyink@cpan.org>.
COPYRIGHT AND LICENCE
This software is copyright (c) 2012-2013 by Toby Inkster.
This is free software; you can redistribute it and/or modify it under the
same terms as the Perl 5 programming language system itself.
DISCLAIMER OF WARRANTIES
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.