【问题标题】:making array of hashes from file text perl从文件文本perl制作哈希数组
【发布时间】:2016-07-23 08:10:40
【问题描述】:

我有一个像这样的文本文件

{
  "TYPE": "EMAIL",
  "ITEMS": [
    {
      "SENT": "2016-02-01T19:03:02.00Z",
      "SUBJECT": "UPCOMING EVENTS: ORIENTATION 2016",
      "TIMEZONE": "AUSTRALIA/MELBOURNE",
      "CONTENT": "WE'RE PLEASED TO BE WORKING WITH RMIT LINK'S ORIENTATION TEAM AND RUSU TO WELCOME ALL NEW STUDENTS TO CAMPUS THROUGH A SERIES OF EXCITING ORIENTATION EVENTS. THIS EMAIL SERVES AS A NOTIFICATION TO MAKE SURE YOU KNOW WHEN THE MAJOR EVENTS ARE OCCURRING, TO ENSURE THEY DON'T INTERRUPT YOUR WORK AND SO THAT YOU ARE ABLE TO ENCOURAGE ALL NEW STUDENTS TO ATTEND. BRUNSWICK ALL STUDENTS WELCOME, 23 FEBRUARY 12 - 1:30PM BRUNSWICK COURTYARD. BUNDOORA ALL STUDENTS WELCOME, 24 FEBRUARY 12 - 2PM BUNDOORA WEST CONCOURSE. CITY ALL STUDENTS WELCOME, 25 FEBRUARY 11AM - 2:30PM ALUMNI COURTYARD, UNIVERSITY WAY. RUSU WELCOME BASH, 25 FEBRUARY 4PM - 9PM ALUMNI COURTYARD. CITY CLUBS DAY, 3 MARCH 11AM - 2PM ALUMNI COURTYARD, UNIVERSITY WAY."
    },
    {
      "SENT": "2016-03-03T19:03:02.00Z",
      "SUBJECT": "PROJECT 1 FIRST TIME MEETING",
      "TIMEZONE": "AUSTRALIA/MELBOURNE",
      "CONTENT": "EARLY NEXT WEEK IS GOOD FOR US.  HOW ABOUT MONDAY 11AM?"
    },
    {
      "SENT": "2016-03-03T19:03:02.00Z",
      "SUBJECT": "PROJECT 1 FIRST TIME MEETING",
      "TIMEZONE": "AUSTRALIA/MELBOURNE",
      "CONTENT": "EARLY NEXT WEEK IS GOOD FOR US.  HOW ABOUT TUESDAY 11:30 AM?"
    },
}

我正在尝试提取将 ITEMS 制作为哈希数组的信息。这样我就可以访问已发送主题时区等的值。

我试过了,还是不行。有什么帮助吗?

my @AoH ;



while ( <> ) {
    my $rec = {};
    for  my $field ( split ) {
        (my $key, my $value) = split /:/, $field;
        $rec->{$key} = $value;
    }
    push @AoH, $rec;
}

【问题讨论】:

  • 看起来像一个 json 文件。见JSON in Perl at Perl Maven
  • 如果您能解释一下如何代码无法正常工作,那就太好了,即使 sn-p 简单易读。

标签: arrays perl file split


【解决方案1】:

这是 JSON 数据(JavaScript 对象表示法),除了最后一个逗号 , 应该是右方括号 ]。使用JSON模块将其解码为Perl数据结构

这个程序显示了原理。它只打印每个项目的主题行,但我想你明白了

use strict;
use warnings 'all';

use JSON qw/ decode_json /;

my $json = do {
    open my $fh, '<:raw', 'text_file.txt' or die $!;
    local $/;
    <$fh>;
};

my $data = decode_json($json);
my $items = $data->{ITEMS};

for my $item ( @$items ) {
    print $item->{SUBJECT}, "\n";
}

输出

UPCOMING EVENTS: ORIENTATION 2016
PROJECT 1 FIRST TIME MEETING
PROJECT 1 FIRST TIME MEETING

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 2013-12-05
    • 2013-03-06
    • 2014-02-27
    • 2019-10-22
    • 2021-02-27
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多