如何在perl中将文本文件转换为JSON数据?
我有一个perl文件名。我想将此文件转换为JSON数据。这在perl中可能吗如何在perl中将文本文件转换为JSON数据?,perl,Perl,我有一个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? }
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?
}
您可以使用CPAN中的JSON模块从哈希创建JSON。由您定义要JSONify的结构。您可以使用CPAN的JSON模块从哈希创建JSON。由您定义要JSONify的结构。您需要找到将文件转换为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文本非常简单,您需要找到将文件转换为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文本是非常简单的
#!/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
#/usr/bin/perl-Tw
严格使用;
使用警告;
使用JSON-qw(to_-JSON);
我的$regex=qr{
\A
(\w+)\s+#标题
(\d+)\s+#名称
(\w+)\s+#类型
(\w+\s+\s+\s+\s+#高度
(\w+\s+\s+)#深度
\z
}xms;
我的@行;
我的@columns=split/\s+/;
while(我的$line=){
$line=~s{(?:\A\s*|\s*\z)}{}xmsg;
如果($line=~$regex){
我的%记录;
@记录{@columns}=($1、$2、$3、$4、$5);
按@行,\%记录;
}
否则{
警告“格式错误的输入:$line”;
}
}
打印到\u json(\@行,{pretty=>1});
__资料__
标题名称类型高度深度
航路点001用户N12 58.441 E77 32.647
航路点002用户N13 00.503 E77 41.714
航路点003用户N13 00.856 E77 42.054
下面是我该如何做的
#!/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
#/usr/bin/perl-Tw
严格使用;
使用警告;
使用JSON-qw(to_-JSON);
我的$regex=qr{
\A
(\w+)\s+#标题
(\d+)\s+#名称
(\w+)\s+#类型
(\w+\s+\s+\s+\s+#高度
(\w+\s+\s+)#深度
\z
}xms;
我的@行;
我的@columns=split/\s+/;
while(我的$line=){
$line=~s{(?:\A\s*|\s*\z)}{}xmsg;
如果($line=~$regex){
我的%记录;
@记录{@columns}=($1、$2、$3、$4、$5);
按@行,\%记录;
}
否则{
警告“格式错误的输入:$line”;
}
}
打印到\u json(\@行,{pretty=>1});
__资料__
标题名称类型高度深度
航路点001用户N12 58.441 E77 32.647
航路点002用户N13 00.503 E77 41.714
航路点003用户N13 00.856 E77 42.054
y否决票?这可能吗?使用JSON序列化字符串是愚蠢的,以至于有些解析器甚至不支持将字符串作为基本元素。JSON用于序列化数据结构。(不是我投了否决票。)请从文件中添加一些示例内容。您最终得到解决方案了吗?y否决票?这可能吗?使用JSON序列化字符串是愚蠢的,以至于有些解析器甚至不支持将字符串作为基本元素。JSON用于序列化数据结构。(不是我投了否决票。)请从文件中添加一些示例内容。您最终得到解决方案了吗?+1表示“pretty”子句。输出格式让人觉得很舒服。+1表示“pretty”子句。输出格式让人感到安心。