我正在研究一个使用JSON模块解析reddit的JSON的perl脚本。
但是我确实遇到了对perl和json都很新的问题。
我设法成功解析了首页和subreddits,但是注释有不同的结构,我无法弄清楚如何访问我需要的数据。
这是成功找到首页和子编辑的“数据”哈希的代码:
foreach my $children(@{$json_text->{"data"}->{"children"}}) #For values of children.
{
my $data = $children->{"data"}; #accessing each data hash.
my %phsh = (); #my hash to collect and print.
$phsh{author} = $data->{"author"};#Here I get the "author" value from "data"
*Etc....
这成功地从http://www.reddit.com/.json
获得了我需要的东西但是当我转到评论的json this one for example时,它有不同的格式,我无法弄清楚如何解析它。如果我尝试与解析器崩溃之前相同的事情,说它不是HASH引用。
所以我的问题是:如何在第二个JSON中访问“孩子”?我需要获取Post的数据和评论的数据。有人可以帮忙吗?
提前致谢! (我知道这可能是显而易见的,但我的睡眠很少XD)
答案 0 :(得分:3)
您需要查看JSON数据或转储已解码的数据以查看它采用的形式。例如,评论数据是顶层的数组。
以下是一些打印所有顶级评论的body
字段的代码。请注意,评论可能在其replies
字段中包含一系列回复,并且每个回复也可能依次有回复。
根据您要执行的操作,您可能需要通过检查ref
operator返回的值来检查引用是对数组还是哈希。
use strict;
use warnings;
binmode STDOUT, ':utf8';
use JSON;
use LWP;
use Data::Dump;
my $ua = LWP::UserAgent->new;
my $resp = $ua->get('http://www.reddit.com/r/funny/comments/wx3n5/caption_win.json');
die $resp->status_line unless $resp->is_success;
my $json = $resp->decoded_content;
my $data = decode_json($json);
die "Error: $data->{error}" if ref $data eq 'HASH' and exists $data->{error};
dd $data->[1]{data}{children}[0];
print "\n\n";
my $children = $data->[1]{data}{children};
print scalar @$children, " comments:\n\n";
for my $child (@$children) {
print $child->{data}{body}, "\n";
}