2013-03-12 114 views
-2

我真的很努力去理解如何浏览一个JSON对象。我正在使用JSON.pm,并且我正在试图访问每个“名称”参数并将其“values”数组的第一个索引存储在我的桌面上。如何从PERL中提取此JSON对象的数据?

我无法理解基本结构,数组/哈希引用是如何工作的,以及如何遍历它们以访问我需要的值。如果有人能帮助我指出正确的方向......我现在很迷茫/困惑。

这是我正在使用的示例数据(Facebook开放图形对象)。

{ 
    "data": [ 
    { 
     "id": "219127134886593/insights/page_impressions/week", 
     "name": "page_impressions", 
     "period": "week", 
     "values": [ 
     { 
      "value": 31600, 
      "end_time": "2013-03-07T08:00:00+0000" 
     }, 
     { 
      "value": 31979, 
      "end_time": "2013-03-08T08:00:00+0000" 
     }, 
     { 
      "value": 29517, 
      "end_time": "2013-03-09T08:00:00+0000" 
     } 
     ], 
     "title": "Weekly Total Impressions", 
     "description": "Weekly The number of impressions seen of any content associated with your Page. (Total Count)" 
    }, 
    { 
     "id": "219127134886593/insights/page_impressions_organic/week", 
     "name": "page_impressions_organic", 
     "period": "week", 
     "values": [ 
     { 
      "value": 23587, 
      "end_time": "2013-03-07T08:00:00+0000" 
     }, 
     { 
      "value": 23858, 
      "end_time": "2013-03-08T08:00:00+0000" 
     }, 
     { 
      "value": 22813, 
      "end_time": "2013-03-09T08:00:00+0000" 
     } 
     ], 
     "title": "Weekly Organic impressions", 
     "description": "Weekly The number of times your posts were seen in News Feed or ticker or on visits to your Page. These impressions can be by people who have liked your Page and people who haven't. (Total Count)" 
    }, 
    ], 
    "paging": { 
    "previous": "https://graph.facebook.com/219127134886593/insights/page_impressions,page_impressions_organic,page_impressions_viral,page_storytellers/week?since=1362383320&until=1362642520", 
    "next": "https://graph.facebook.com/219127134886593/insights/page_impressions,page_impressions_organic,page_impressions_viral,page_storytellers/week?since=1362901720&until=1363160920" 
    } 
} 

而这就是我的工作访问不同的元素:

foreach my $data ($decoded_json->{data}) { 
      foreach my $item (@$data) { 
       $list{ $item->{'name'} } = $item->{'values'}; 
       print "Value 3: @($item->{'values'})[3]\n"; 
      } 
     } 
+0

_“我无法理解的基本结构,如何数组/哈希引用工作,如何迭代它们以访问我需要的值。“ - 那么你应该参考一个初学者教程,该教程解释了基本的PERL数据类型以及如何使用它们。 – CBroe 2013-03-12 09:16:55

+0

我明白了,我是。但是,在使用JSON对象时它不会点击。我希望通过一个例子来帮助我理解。 – 2013-03-12 09:26:01

+0

没有“JSON对象”这样的东西。 JSON是一种文本格式。有关Perl中的参考,请参见['perldoc perlreftut'](http://perldoc.perl.org/perlreftut.html)。 – melpomene 2013-03-12 10:03:54

回答

1
for my $item (@{ $decoded_json->{data} }) { 
    $list{ $item->{'name'} } = $item->{'values'}; 
    print "Value 4: $item->{'values'}[3]\n"; 
} 

更多有关引用见http://p3rl.org/REF

0

成功!

foreach my $data ($decoded_json->{data}) { 
    foreach my $item (@$data) { 
     $list{ $item->{'name'} } = ${ $item->{'values'} }[1]->{'value'}; 
     print "Name: $item->{'name'}\n"; 
     print "Value 3: ${ $item->{'values'} }[1]->{'value'}\n"; 
    } 
} 

谢谢: dispersiondesign.com thegeekstuff.com

感谢的人,凝聚:

foreach my $item (@{ $decoded_json->{data} }) { 
    $list{ $item->{'name'} } = $item->{'values'}->[1]->{'value'}; 
    print "Name: $item->{'name'}\n"; 
    print "Value 3: $item->{'values'}->[1]->{'value'}\n"; 
} 
+1

你应该可以简单地说:$ item - > {'values' } - > [1] - > { '值'} – JackTheRandom 2013-03-12 10:10:28