0

我在 perl 中有一个文件名。我想将此文件转换为 JSON 数据。在perl中可以吗?

sub conversion {
  my($p)=@_;
  my $f = $p->{file};
  open(FIN,"</pathtofile/$f");
  # now i want to convert this opened file into json 
  # something like encode_json(<FIN>);
  # is that possible?
}

文件内容示例:

Header   Name Type  Altitude     Depth       
Waypoint 001  User  N12 58.441   E77 32.647                                 
Waypoint 002  User N13 00.503    E77 41.714 
Waypoint 003  User N13 00.856    E77 42.054                             
4

3 回答 3

6

这就是我将如何去做。

#!/usr/bin/perl -Tw

use strict;
use warnings;
use JSON qw( to_json );

my $regex = qr{
    \A
        ( \w+ ) \s+          # Header
        ( \d+ ) \s+          # Name
        ( \w+ ) \s+          # Type
        ( \w+ \s+ \S+ ) \s+  # Altitude
        ( \w+ \s+ \S+ )      # Depth
    \z
}xms;

my @rows;
my @columns = split /\s+/, <DATA>;

while ( my $line = <DATA> ) {

    $line =~ s{(?: \A \s* | \s* \z)}{}xmsg;

    if ( $line =~ $regex ) {

        my %record;

        @record{@columns} = ( $1, $2, $3, $4, $5 );

        push @rows, \%record;
    }
    else {

        warn "malformed input: $line";
    }
}

print to_json( \@rows, { pretty => 1 } );


__DATA__
Header   Name Type  Altitude     Depth
Waypoint 001  User  N12 58.441   E77 32.647
Waypoint 002  User N13 00.503    E77 41.714
Waypoint 003  User N13 00.856    E77 42.054
于 2012-12-11T05:50:59.083 回答
0

您需要找到将文件转换为 perl 哈希的逻辑,然后使用 cpan 中的“JSON”模块将其转换为 json 文本。

检查以下代码:

#!/usr/bin/perl -w
use strict;
use JSON;

my $hash = { 
            Waypoint    => {
                            Name    => "001",
                            Type    => "User",
                            Altitude    => "58.441",
                            Depth   => "E77 32.647",
                        },
                };

my $json_text = encode_json $hash;
print $json_text."\n";

它的输出是:

{"Waypoint":{"Altitude":"58.441","Type":"User","Depth":"E77 32.647","Name":"001"}}

由于这个问题是关于我们是否可以将 txt 文件(考虑到提供的示例)转换为 json,所以我留给您将示例文件转换为哈希。但是,从上面的代码中,将散列转换为 json 文本非常简单

于 2012-12-11T05:32:42.013 回答
0

您可以使用 CPAN 中的 JSON 模块从散列创建 JSON。您可以定义要 JSONify 的结构。

于 2012-12-11T05:12:18.983 回答