31 lines
977 B
31 lines
977 B
package NGCP::Panel::Utils::ValidateJSON;
|
|
use Sipwise::Base;
|
|
use parent 'JSON::Tiny::Subclassable';
|
|
|
|
my $WHITESPACE_RE = qr/[\x20\x09\x0a\x0d]*/;
|
|
|
|
sub new {
|
|
my ($self, $json) = @_;
|
|
$self = $self->next::method;
|
|
$self->decode($json);
|
|
die $self->error . "\n" if $self->error;
|
|
}
|
|
|
|
sub _decode_object {
|
|
my $self = shift;
|
|
my $hash = $self->_new_hash;
|
|
until (m/\G$WHITESPACE_RE\}/gc) {
|
|
m/\G$WHITESPACE_RE"/gc or $self->_exception('Expected string while parsing object');
|
|
my $key = $self->_decode_string;
|
|
$self->_exception("Unexpected duplicate object member name $key") if exists $hash->{$key};
|
|
m/\G$WHITESPACE_RE:/gc or $self->_exception('Expected colon while parsing object');
|
|
$hash->{$key} = $self->_decode_value;
|
|
redo if m/\G$WHITESPACE_RE,/gc;
|
|
last if m/\G$WHITESPACE_RE\}/gc;
|
|
$self->_exception('Expected comma or right curly bracket while parsing object');
|
|
}
|
|
return $hash;
|
|
}
|
|
|
|
1;
|