##
use strict;
use warnings;
use JSON::XS;
use Data::Dumper;
my $s = <<"END";
[
{ "op": "add", "path": "/baz", "value": "qux", "op": "remove" }
]
END
my $x = 1;
$s =~ s/\"([^\"]+)\"/"\"".++$x."_".$1."\""/ge;
my $j = JSON::XS->new()->filter_json_object(sub {
my %seen;
for (keys %{shift()}) {
die unless /^\d+\_(.*)$/;
die "key [$1] already seen" if $seen{$1}++;
}
});
$j->decode($s);
####
key [op] already seen