从ruby中的SOAP哈希中获取多个值

时间:2014-08-22 13:47:23

标签: ruby soap wsdl soap-client

我在ruby中有一个SOAP响应。我试图获得两个或更多的价值。如果只有一个实例,我可以成功获取我要查找的数据,但是如果有多个实例,我会收到以下错误:

can't convert String into Integer (TypeError)

我使用的代码是:

p activecall["GetActiveCallsResult"]["ShoreTelCallStateInfo"]["callInfo"].callID

以下是SOAP响应的示例。有什么想法,当有多个值时,我如何解析不同的值?我想从下面的例子中得到的两个值是70342和68496。

<SOAP::Mapping::Object:0x..fdb7aa9f8 {http://www.ShoreTel.com/ProServices/SDK/Web}GetActiveCallsResult=#
<SOAP::Mapping::Object:0x..fdb7aa8d6 {http://www.ShoreTel.com/ProServices/SDK/Web}ShoreTelCallStateInfo=[#
    <SOAP::Mapping::Object:0x..fdb7aa796 {http://www.ShoreTel.com/ProServices/SDK/Web}callInfo=#
        <SOAP::Mapping::Object:0x..fdb7aa656 {http://www.ShoreTel.com/ProServices/SDK/Web}lineID="20837" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callID="68496" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}isExternal="true" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}isInbound="false" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callReason="None" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}connectedID="9+18012624550" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callerID="1955" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callerIDName="Joel Lewis" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}calledID="9+13852045017" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callParties=#
                <SOAP::Mapping::Object:0x..fdb7a7d98 {http://www.ShoreTel.com/ProServices/SDK/Web}CallPartyInfo=[#
                    <SOAP::Mapping::Object:0x..fdb7a7c94 {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="1" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742591" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#
                            <SOAP::Mapping::Object:0x..fdb7a6e8e {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="21" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (21)">>, #
                    <SOAP::Mapping::Object:0x..fdb7a569c {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="2" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742590" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#
                            <SOAP::Mapping::Object:0x..fdb7a486e {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="20" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (20)">>]> 
                {http://www.ShoreTel.com/ProServices/SDK/Web}callUniqueID="3219803974" 
                {http://www.ShoreTel.com/ProServices/SDK/Web}callGUID="{00030000-E023-537E-3FD3-0010492377D9}"> 
                {http://www.ShoreTel.com/ProServices/SDK/Web}callState="Conferenced" 
                {http://www.ShoreTel.com/ProServices/SDK/Web}callStateDetail=#
                    <SOAP::Mapping::Object:0x..fdb7a20be> {http://www.ShoreTel.com/ProServices/SDK/Web}callProperties=#
                        <SOAP::Mapping::Object:0x..fdb7a1ce0 {http://www.ShoreTel.com/ProServices/SDK/Web}KeyValuePair=#
                            <SOAP::Mapping::Object:0x..fdb7a1bd2 {http://www.ShoreTel.com/ProServices/SDK/Web}propertyName="_ST_CONF_ROLE" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}propertyValue="CRL:1">>>, #
                    <SOAP::Mapping::Object:0x..fdb7a0a16 {http://www.ShoreTel.com/ProServices/SDK/Web}callInfo=#
                        <SOAP::Mapping::Object:0x..fdb7a08cc {http://www.ShoreTel.com/ProServices/SDK/Web}lineID="20837" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}callID="70342" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}isExternal="true" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}isInbound="false" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}callReason="None" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}connectedID="1955" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}connectedIDName="Joel Lewis" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}callerID="1955" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}callerIDName="Joel Lewis" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}calledID="9+13852045017" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}callParties=#
                                <SOAP::Mapping::Object:0x..fdb79dbc2 {http://www.ShoreTel.com/ProServices/SDK/Web}CallPartyInfo=#
                                    <SOAP::Mapping::Object:0x..fdb79daa0 {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="1" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742591" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#
                                    <SOAP::Mapping::Object:0x..fdb79cc90 {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="21" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (21)">>> 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}callUniqueID="3219803974" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}callGUID="{00030000-E022-537E-3FD3-0010492377D9}"> 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}callState="Connected" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}callStateDetail="Active" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}callProperties=#
                            <SOAP::Mapping::Object:0x..fdb799e00 {http://www.ShoreTel.com/ProServices/SDK/Web}KeyValuePair=#
                                <SOAP::Mapping::Object:0x..fdb799cfc {http://www.ShoreTel.com/ProServices/SDK/Web}propertyName="_ST_CONF_ROLE" 
                                    {http://www.ShoreTel.com/ProServices/SDK/Web}propertyValue="CRL:1">>>, #
                        <SOAP::Mapping::Object:0x..fdb798e10 {http://www.ShoreTel.com/ProServices/SDK/Web}callInfo=#<SOAP::Mapping::Object:0x..fdb798c9e {http://www.ShoreTel.com/ProServices/SDK/Web}lineID="20837" {http://www.ShoreTel.com/ProServices/SDK/Web}callID="70777" {http://www.ShoreTel.com/ProServices/SDK/Web}isExternal="true" {http://www.ShoreTel.com/ProServices/SDK/Web}isInbound="false" {http://www.ShoreTel.com/ProServices/SDK/Web}callReason="None" {http://www.ShoreTel.com/ProServices/SDK/Web}connectedID="9+13852045017" {http://www.ShoreTel.com/ProServices/SDK/Web}callerID="1955" {http://www.ShoreTel.com/ProServices/SDK/Web}callerIDName="Joel Lewis" {http://www.ShoreTel.com/ProServices/SDK/Web}calledID="9+13852045017" {http://www.ShoreTel.com/ProServices/SDK/Web}callParties=#<SOAP::Mapping::Object:0x..fdb79641c {http://www.ShoreTel.com/ProServices/SDK/Web}CallPartyInfo=[#<SOAP::Mapping::Object:0x..fdb796318 {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="1" {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742591" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#<SOAP::Mapping::Object:0x..fdb795558 {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="21" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (21)">>, #<SOAP::Mapping::Object:0x..fdb793d7a {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="2" {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742590" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#<SOAP::Mapping::Object:0x..fdb792f4c {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="20" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (20)">>]> {http://www.ShoreTel.com/ProServices/SDK/Web}callUniqueID="3219803974" {http://www.ShoreTel.com/ProServices/SDK/Web}callGUID="{00030000-E022-537E-3FD3-0010492377D9}"> {http://www.ShoreTel.com/ProServices/SDK/Web}callState="Conferenced" {http://www.ShoreTel.com/ProServices/SDK/Web}callStateDetail=#<SOAP::Mapping::Object:0x..fdb790706> {http://www.ShoreTel.com/ProServices/SDK/Web}callProperties=#<SOAP::Mapping::Object:0x..fdb79030a {http://www.ShoreTel.com/ProServices/SDK/Web}KeyValuePair=#<SOAP::Mapping::Object:0x..fdb7901c0 {http://www.ShoreTel.com/ProServices/SDK/Web}propertyName="_ST_CONF_ROLE" {http://www.ShoreTel.com/ProServices/SDK/Web}propertyValue="CRL:1">>>]>>

1 个答案:

答案 0 :(得分:1)

从错误消息中看,当有多个结果时你有一个数组,因为它在[]中寻找一个整数而不是字符串

您需要遍历数组并拉出所需的元素。

我猜它是ShoreTelCallStateInfo这个数组,但我从数据转储中并不完全清楚,因为它似乎在中间被截断了。

类似的东西:

activecall["GetActiveCallsResult"]["ShoreTelCallStateInfo"].each do |info|
  p info["callInfo"].callID  
end