2015-03-31 77 views
0

我有一串格式化的數據,我想推送到一個數組,但我的Perl技能缺乏。將格式化的數據推送到Perl中的數組中

的字符串是:

'ShoreTelCallStateInfo' => [ 
    { 
     'callStateDetail' => 'Active', 
     'callState' => 'OnHold', 
     'callInfo' => { 
      'callerIDName' => 'Joel Lewis',           
      'callID' => '66766', 
      'lineID' => '3947', 
      'connectedIDName' => 'VM-Forward', 
      'calledID' => '2105', 
      'callerID' => '1955', 
      'isInbound' => 'false', 
      'calledIDName' => 'VM-Forward', 
      'callReason' => 'None', 
      'callUniqueID' => '2488927099', 
      'connectedID' => '2105', 
      'isExternal' => 'false', 
      'callGUID' => '{00030000-67CA-537E-3FD8-0010492377D9}' 
     } 
    }, 
    { 
     'callStateDetail' => 'Active', 
     'callState' => 'Connected', 
     'callInfo' => { 
      'callerIDName' => 'Lewis Joel', 
      'callID' => '73202', 
      'lineID' => '3947', 
      'connectedIDName' => 'Lewis Joel', 
      'calledID' => '1955', 
      'callerID' => '+1385#######', 
      'isInbound' => 'true', 
      'calledIDName' => 'Joel Lewis', 
      'callReason' => 'None', 
      'callUniqueID' => '2193468845', 
      'connectedID' => '+1385#######', 
      'isExternal' => 'true', 
      'callGUID' => '{00030000-6809-537E-3FD8-0010492377D9}' 
     } 
    } 
    ] 
}; 

我試圖簡單地創建數組和字符串分配,但是這是行不通的:

my @magicarray = $string; 

是否有一個快速的方法來初始化數組與格式化的數據?

+0

這不是一個字符串。如果你在開頭添加一個'{',那將是一個匿名散列。也許你的意思是一個「標量」? – choroba 2015-03-31 15:43:43

+0

它看起來不像我的字符串 – 2015-03-31 15:43:52

+0

它存儲爲一個字符串,我希望它被轉換。 – 2015-03-31 15:45:15

回答

2

只需在缺少的左大括號前加上eval即可。在這樣做之前,請確保該字符串不包含任何命令(想象一下system 'rm -rf /'會導致什麼)。

my $string = q('ShoreTelCallStateInfo' => [ 
            { 
             'callStateDetail' => 'Active', 
# ETC... 
            } 
            ] 
     };); 
my @array = eval "{$string"; 
1

如果沒有更好地理解數據是很困難的。但我認爲這

my $state_info = $result->{ShoreTelCallStateInfo}; 

for my $state_item (@$state_info) { 
    say $state_item->{callInfo}{callerID}; 
} 

當您的樣本數據的工作給予

1955 
+1385####### 

那是接近你想要什麼?

+0

這正是我正在尋找的,但是由於某種原因$狀態信息是空白的。導致沒有循環。我無法弄清楚爲什麼狀態信息沒有獲取數據。另外,我認爲你把這個發佈到了我的錯誤問題上。 – 2015-03-31 16:42:19

+1

對於發佈錯誤的問題,我表示抱歉,但是您的新帖子與此版本非常相似。請回顧一下,解釋數據源的性質,以及爲什麼要使用'Data :: Dumper'來串行化,然後''eval'去反序列化。你的動機可能是有效的,但不可能從你寫的內容中知道。我意識到很多事情對你來說顯然是顯而易見的,但是它們是你工作的系統的一部分。我們無法知道,所以請想象一下,我們來自木星,知道編程,但沒有任何系統 – Borodin 2015-03-31 16:48:26

+0

感謝您耐心等待並嘗試提供幫助。我已經更新了我的原始問題:https://stackoverflow.com/questions/29370434/how-to-loop-through-subarrays-of-a-soaplite-response-in-perl我希望能更容易理解什麼正在進行。 – 2015-03-31 16:57:54

相關問題