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

CPAN の JSON モジュールを使用して、ハッシュから JSON を作成できます。JSON化する構造を定義するのはあなた次第です。

于 2012-12-11T05:12:18.983 に答える
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 に答える