about summary refs log tree commit diff
path: root/third_party/git/t/t0019/parse_json.perl
blob: fea87fb81b62d4f1e9612094c60ee8dceebc07be (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/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++;
}