首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ruby中的httparty响应解释

ruby中的httparty响应解释
EN

Stack Overflow用户
提问于 2015-02-02 16:22:58
回答 1查看 163关注 0票数 0

我有一个服务,它返回(以XML格式)网络列表。该列表可以由1个网络或2+网络组成。

例如,这是从REST客户端返回的,其中有一个网络。

代码语言:javascript
复制
<Vdc status="1" name="VDC1" id="urn:vcloud:vdc:c66c192a-b58e-468c-bca8-4bfd5657f2ff" href= "https://uk-slough-1-6.vchs.vmware.com/api/compute/api/vdc/c66c192a-b58e-468c-bca8-4bfd5657f2ff" type="application/vnd.vmware.vcloud.vdc+xml" xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://uk-slough-1-6.vchs.vmware.com/api/compute/api/v1.5/schema/master.xsd">
<AvailableNetworks>
<Network href= "https://uk-slough-1-6.vchs.vmware.com/api/compute/api/network/4c5703e5-4365-4408-8f8e-12ec3bfc716f" name="default-routed-network" type="application/vnd.vmware.vcloud.network+xml"/>
</AvailableNetworks>
</Vdc>

这是当有两个网络时返回的内容:

代码语言:javascript
复制
<Vdc status="1" name="massimo" id="urn:vcloud:vdc:ec16bc23-659d-48b8-af7d-9dda6584122e" href= "https://uk-slough-1-6.vchs.vmware.com/api/compute/api/vdc/ec16bc23-659d-48b8-af7d-9dda6584122e" type="application/vnd.vmware.vcloud.vdc+xml" xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://uk-slough-1-6.vchs.vmware.com/api/compute/api/v1.5/schema/master.xsd">
<AvailableNetworks>
<Network href= "https://uk-slough-1-6.vchs.vmware.com/api/compute/api/network/762cc1c7-d9cc-4eb8-9dfd-17bbc04ca607" name="default-routed-network" type="application/vnd.vmware.vcloud.network+xml"/>
<Network href= "https://uk-slough-1-6.vchs.vmware.com/api/compute/api/network/8cf5b475-901b-4bed-9506-b394ed2505c2" name="massimo-network" type="application/vnd.vmware.vcloud.network+xml"/>
</AvailableNetworks>
</Vdc>

如果我使用httparty查询服务,当有一个网络时,这就是我在响应中得到的:

代码语言:javascript
复制
"AvailableNetworks" => {
        "Network" => {
            "href" => "https://uk-slough-1-6.vchs.vmware.com/api/compute/api/network/4c5703e5-4365-4408-8f8e-12ec3bfc716f",
            "name" => "default-routed-network",
            "type" => "application/vnd.vmware.vcloud.network+xml"
        }
    },

这就是当有两个网络时我得到的结果:

代码语言:javascript
复制
 "AvailableNetworks" => {
        "Network" => [
            [0] {
                "href" => "https://uk-slough-1-6.vchs.vmware.com/api/compute/api/network/762cc1c7-d9cc-4eb8-9dfd-17bbc04ca607",
                "name" => "default-routed-network",
                "type" => "application/vnd.vmware.vcloud.network+xml"
            },
            [1] {
                "href" => "https://uk-slough-1-6.vchs.vmware.com/api/compute/api/network/8cf5b475-901b-4bed-9506-b394ed2505c2",
                "name" => "massimo-network",
                "type" => "application/vnd.vmware.vcloud.network+xml"
            }
        ]
    },

这使得管理应对措施变得非常困难。目前,我所做的工作如下:我运行一个检查,看看response["Vdc"]["Networks"]是否是一个数组,如果它是,我迭代它的长度,并将它的所有元素作为独立的散列项。如果它不是一个数组,我就把它当作哈希来处理response["Vdc"]["Networks"]

有没有更好的方法来处理这件事,避免检查?理想情况下,我希望看到response["Vdc"]["Networks"]始终是一个数组(如果有一个网络,我希望看到一个带有1个元素的数组)。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-02 21:12:20

由于httparty及其底层XML解析器不理解API模式,因此它将被简单地创建为键值对。如果该元素还不是数组,则此代码将强制该元素为数组。

代码语言:javascript
复制
result["Vdc"]["AvailableNetworks"]["Network"] = [result["Vdc"]["AvailableNetworks"]["Network"]] unless result["Vdc"]["AvailableNetworks"]["Network"].is_a? Array
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28282125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档