App-jsonvalidate

 view release on metacpan or  search on metacpan

scripts/jsonvalidate  view on Meta::CPAN

        # No LWP or fetch failed; return undef so caller can try alternatives or die.
        return;
    };
}

sub _first_existing_path
{
    for my $p ( @_ )
    {
        return( $p ) if( defined( $p ) && $p->exists );
    }
    return;
}

# Get the JSON data from STDIN
sub _get_stdin
{
    $out->print( "Enter the JSON data below and type ctrl-D when finished:\n" ) if( &_is_tty );
    my $json = '';
    $json .= $_ while( <STDIN> );
    $json =~ s/(\r?\n)+$//gs;
    _message( 4, "JSON received is '$json'" );
    return( $json );
}

# Taken from ExtUtils::MakeMaker
sub _is_tty
{
    return( -t( STDIN ) && ( -t( STDOUT ) || !( -f STDOUT || -c STDOUT ) ) );
}

sub _message
{
    my $required_level;
    if( $_[0] =~ /^\d{1,2}$/ )
    {
        $required_level = shift( @_ );
    }
    else
    {
        $required_level = 0;
    }
    return if( !$LOG_LEVEL || $LOG_LEVEL < $required_level );
    my $msg = join( '', map( ref( $_ ) eq 'CODE' ? $_->() : $_, @_ ) );
    if( index( $msg, '</>' ) != -1 )
    {
        $msg =~ s
        {
            <([^\>]+)>(.*?)<\/>
        }
        {
            my $colour = $1;
            my $txt = $2;
            my $obj = color( $txt );
            my $code = $obj->can( $colour ) ||
                die( "Colour '$colour' is unsupported by Term::ANSIColor::Simple" );
            $code->( $obj );
        }gexs;
    }
    my $frame = 0;
    my $sub_pack = (caller(1))[3] || '';
    my( $pkg, $file, $line ) = caller( $frame );
    my $sub = ( caller( $frame + 1 ) )[3] // '';
    my $sub2;
    if( length( $sub ) )
    {
        $sub2 = substr( $sub, rindex( $sub, '::' ) + 2 );
    }
    else
    {
        $sub2 = 'main';
    }
    return( $err->print( "${pkg}::${sub2}() [$line]: $msg\n" ) );
}

sub _run_data_maybe_array
{
    my( $js, $data, $ok_ref, $fail_ref, $idx_ref, $json ) = @_;

    if( ref( $data ) eq 'ARRAY' )
    {
        for my $elem ( @$data )
        {
            _run_one( $js, $elem, $ok_ref, $fail_ref, ++$$idx_ref, $json );
        }
    }
    else
    {
        _run_one( $js, $data, $ok_ref, $fail_ref, ++$$idx_ref, $json );
    }
}

sub _run_one
{
    my( $js, $data, $ok_ref, $fail_ref, $idx, $json ) = @_;

    my $ok = $js->validate( $data );

    if( $opts->{json} )
    {
        if( $ok )
        {
            $out->print( $json->encode({ index => $idx, ok => JSON::true }), "\n" );
        }
        else
        {
            my @errs = map
            {
                {
                    path       => $_->path,
                    message    => $_->message,
                    keyword    => $_->keyword,
                    schema_ptr => $_->schema_pointer,
                }
            } @{$js->errors || []};

            $out->print( $json->encode({
                index => $idx,
                ok    => JSON::false,
                errors => \@errs,
            }), "\n" );
        }
    }



( run in 3.653 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )