2013-10-21 48 views
0

我想對給定的輸入進行輸入並對其運行特定的分析,並用這些分析的輸出填充散列。例如,我想這個輸入:使用已解析的輸入元素填充散列

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

被解析(用grep的組合和一些更具體的擺弄,我沒有強大的抓)到列出的條形碼和表格樣本名稱如下:

barcode   sample 
IonXpress_001 I-735 
IonXpress_002 13055 

其中「條形碼」和「樣本」被視爲關鍵字。另一個例子是,我想grep來啓動的行:

"library": "hg19", 

和映射值「hg19」(因此,第二組引號內的字符串,以編程方式而言)至像的任意鍵「lib」:

Library 
hg19 

回答

1

您正在解析的字符串看起來像JSON一樣可疑。爲什麼不使用JSON模塊(它隨附較新的Perls,但可以從CPAN安裝用於舊版本),而不是編寫自己的解析器?

+0

我將從幾個不同的來源提取數據,其中一些是JSON-y,一些不是。不過有用的建議,謝謝! – soosus

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);