以下是输入和输出详细信息
输入:这只是一个示例输入,实际输入是巨大的,仅在一行中
[{"mnemonic":"PT.IA1","ID":"000628"}, {"mnemonic":"EOR.1","ID":"000703"}]
代码:我试图通过将定界符设置为}来读取文件,以便获取每个值,但是作为单行文件,它将所有内容打印为一个,我如何通过为此设置定界符来解析此行行,拆分功能足以完成这项工作吗?
our $conf =
{
chunk_separator => '\{,',
}
open( FH, "Etot_Data.txt" ) or die $!;
while ( my $chunk = <FH> ){
my $sections = [ split $conf->{chunk_separator}, $chunk ]
print "$chunk\n";
}
输出
我想从每个值中选择“ ID”,并在其前添加“ abc”。最终字符串看起来像abc.000628或abc.000703并将其保存在哈希中。除了json字符串中的ID外,不需要其他值。是否可以将json文件作为普通文件读取并对其进行操作。我没有json解析器,也没有使用它的选项
谢谢您的帮助
如果您无法安装任何外部模块,则可以将其包括在内。
JSON
在脚本所在的目录中创建一个目录,然后复制JSON :: PP模块的内容,并将其放入刚创建PP.pm
的JSON
目录内的文件中。然后,在脚本中,将当前工作目录添加为库目录:use lib '.';
和use JSON::PP;
。
use warnings;
use strict;
use lib '.';
use JSON::PP qw(decode_json);
my $json;
{
local $/;
open my $fh, '<', 'file.json' or die $!;
$json = <$fh>;
}
my $perl = decode_json $json;
for (@$perl){
my $id = 'abc.' . $_->{ID};
print "$id\n";
}
输出:
abc.000628
abc.000703
如果您只需要稍作改动就可以隐藏已经创建了另一个模块的事实,则可以对模块进行一些更改,并将其直接包含在脚本本身中。
请注意,JSON::PP
它位于v5.14 +中的Perl核心中。OP在评论中指出他们在5.10上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句