解析Reddit的JSON时出现问题

时间:2012-07-21 14:27:06

标签: json perl reddit

我正在研究一个使用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)

1 个答案:

答案 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";
}