about summary refs log tree commit diff
path: root/third_party/git/t/t0019/parse_json.perl
#!/usr/bin/perl
use strict;
use warnings;
use JSON;

sub dump_array {
    my ($label_in, $ary_ref) = @_;
    my @ary = @$ary_ref;

    for ( my $i = 0; $i <= $#{ $ary_ref }; $i++ )
    {
	my $label = "$label_in\[$i\]";
	dump_item($label, $ary[$i]);
    }
}

sub dump_hash {
    my ($label_in, $obj_ref) = @_;
    my %obj = %$obj_ref;

    foreach my $k (sort keys %obj) {
	my $label = (length($label_in) > 0) ? "$label_in.$k" : "$k";
	my $value = $obj{$k};

	dump_item($label, $value);
    }
}

sub dump_item {
    my ($label_in, $value) = @_;
    if (ref($value) eq 'ARRAY') {
	print "$label_in array\n";
	dump_array($label_in, $value);
    } elsif (ref($value) eq 'HASH') {
	print "$label_in hash\n";
	dump_hash($label_in, $value);
    } elsif (ref $value) {
	my $bool = $value ? 1 : 0;
	print "$label_in $bool\n";
    } elsif (defined $value) {
	print "$label_in $value\n";
    } else {
	print "$label_in null\n";
    }
}

my $row = 0;
while (<>) {
    my $data = decode_json( $_ );
    my $label = "row[$row]";

    dump_hash($label, $data);
    $row++;
}