使用已解析的输入元素填充哈希

时间:2013-10-21 17:55:01

标签: perl hash elements

我想取一个给定的输入,比如说,并在其上运行特定的解析,并用这些解析的输出填充哈希。例如,我想要这样的输入:

"barcodedSamples": "{\"I-735\":{\"barcodes\":[\"IonXpress_001\"]},\"13055\":{\"barcodes\":[\"IonXpress_002\"]}}",

要解析(使用grep和一些我没有强烈掌握的更具体的小提琴的组合)到表中列出条形码和样本名称,如下所示:

barcode         sample
IonXpress_001   I-735
IonXpress_002   13055

其中“条形码”和“样本”被视为键。另一个例子是我想要开始一行:

"library": "hg19",

并将值“hg19”(所以,第二组引号内的字符串,以编程方式说)映射到任意键,如“lib”:

Library
hg19

2 个答案:

答案 0 :(得分:3)

该字符串非常类似于JSON,但需要进行一些清理才能成为有效的JSON。

#!/usr/bin/perl
use strict;
use warnings FATAL => qw/all/;
use JSON;
use Data::Dumper;

my $json_string = '"barcodedSamples": "{\"I-735\":{\"barcodes\":[\"IonXpress_001\"]},\"13055\":{\"barcodes\":[\"IonXpress_002\"]}}"';

$json_string =~ s/\\//g;                 # remove escape backslashes.
$json_string =~ s/"\{/{/;                # remove an invalid opening quote.
chop $json_string;                       # remove an invalid closing quote.
$json_string = '{' . $json_string . '}'; # wrap in curly braces.

my $json_object = JSON->new( );

my $perl_ref = $json_object->decode( $json_string );

print Dumper( $perl_ref );

答案 1 :(得分:1)

您正在解析的字符串看起来像JSON一样可疑。为什么不使用JSON模块(它带有较新的Perls,但可以从CPAN安装较旧的)而不是编写自己的解析器?