简单的JSONparsing使用Perl
我试图parsingFacebook Graph API的 JSON结果,我有一些麻烦。
我希望做的是打印股份数量:
my $trendsurl = "https://graph.facebook.com/?ids=http://www.filestube.com"; my $json; { local $/; #enable slurp open my $fh, "<", $trendsurl; $json = <$fh>; } my $decoded_json = @{decode_json{shares}}; print $decoded_json;
上面的一些代码是非常令人费解的。 我刚刚用注释重写了它。
#!/usr/bin/perl use LWP::Simple; # From CPAN use JSON qw( decode_json ); # From CPAN use Data::Dumper; # Perl core module use strict; # Good practice use warnings; # Good practice my $trendsurl = "https://graph.facebook.com/?ids=http://www.filestube.com"; # open is for files. unless you have a file called # 'https://graph.facebook.com/?ids=http://www.filestube.com' in your # local filesystem, this won't work. #{ # local $/; #enable slurp # open my $fh, "<", $trendsurl; # $json = <$fh>; #} # 'get' is exported by LWP::Simple; install LWP from CPAN unless you have it. # You need it or something similar (HTTP::Tiny, maybe?) to get web pages. my $json = get( $trendsurl ); die "Could not get $trendsurl!" unless defined $json; # This next line isn't Perl. don't know what you're going for. #my $decoded_json = @{decode_json{shares}}; # Decode the entire JSON my $decoded_json = decode_json( $json ); # you'll get this (it'll print out); comment this when done. print Dumper $decoded_json; # Access the shares like this: print "Shares: ", $decoded_json->{'http://www.filestube.com'}{'shares'}, "\n";
运行它并检查输出。 你可以注释掉print Dumper $decoded_json;
当你知道发生了什么事情的时候。
如何使用CURL命令呢? (PS:这是在Windows上运行;对Unix系统进行CURL更改)。
$curl=('C:\\Perl64\\bin\\curl.exe -s http://graph.facebook.com/?ids=http://www.filestube.com'); $exec=`$curl`; print "Output is::: \n$exec\n\n"; ## match the string "shares": in the CURL output if ($exec=~/"shares":?/) { print "Output is::: \n$exec\n\n"; ## string after the match (any string on the right side of "shares":) $shares=$'; ## delete all non-Digit characters after the share number $shares=~s/(\D.*)//; print "Number of Shares is: ".$shares."\n"; } else { print "No Share Information available.\n" }
OUTPUT:
输出是::: {“http://www.msn.com”:;{“id”:“http://www.msn.com”,“shares”:331357,“评论”:19}}
股份数目为:331357