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

相关问题