0

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

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

被解析(使用 grep 和一些我没有掌握的更具体的摆弄的组合)到一个列出条形码和样本名称的表中,如下所示:

barcode         sample
IonXpress_001   I-735
IonXpress_002   13055

其中“barcode”和“sample”被视为键。另一个例子是我想 grep 到一个开始的行:

"library": "hg19",

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

Library
hg19
4

2 回答 2

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 );
于 2013-10-21T18:33:44.673 回答
1

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

于 2013-10-21T18:21:46.497 回答