我在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">>>]>>
答案 0 :(得分:1)
从错误消息中看,当有多个结果时你有一个数组,因为它在[]
中寻找一个整数而不是字符串
您需要遍历数组并拉出所需的元素。
我猜它是ShoreTelCallStateInfo
这个数组,但我从数据转储中并不完全清楚,因为它似乎在中间被截断了。
类似的东西:
activecall["GetActiveCallsResult"]["ShoreTelCallStateInfo"].each do |info|
p info["callInfo"].callID
end