`[]':无法将String转换为Integer(TypeError)Ruby脚本

时间:2013-12-02 20:01:47

标签: ruby json typeerror

我正在ruby脚本中编写一个简单的函数来从一些JSON数据中获取ID属性。

def getObjectTypeId()
    objects = post(@server.oS.getAllTypeObjectCounts())
    myObject = objects.find_all{|xObjectCountInfo| xObjectCountInfo['ObjectInfo']['ObjectTypeID'] == 'myObjectTypeID'}
    puts myObject
    @objectTypeId = myObject['ObjectInfo']['ID']
end

错误发生在函数的最后一行。正如您所看到的,我将myObject打印到控制台以验证它是散列而不是数组(这是我见过的最常见的导致此错误的问题)。这是输出的片段:

{"_class"=>"XObjectCountInfo", "ObjectInfo"=>{"_class"=>"XObjectInfo", "ID"=>"10102", "ObjectTypeID"=>"myObjectTypeID"}}

什么可能导致我得到“无法将字符串转换为整数”类型错误?

2 个答案:

答案 0 :(得分:3)

与块一起使用时,

Enumerable#find_all给出一个数组。你的myObject是一个大小为1的数组,我很确定。您使用puts方法打印它,因此您只能看到数组中的一个元素哈希值。使用p myObject,您将看到对象myObject是一个元素数组。您修改的上一个语句@objectTypeId = myObject['ObjectInfo']['ID']将为@objectTypeId = myObject.map{|h| h['ObjectInfo']['ID'] }

我使用了Enumerable#map#find_all返回了一个集合数组。这次你在数组中只有一个元素,但任何时候你都可以拥有多个元素。在这种情况下,我认为#map是一个不错的选择。

答案 1 :(得分:0)

如果在您提供的方法的最后一行确实引发了异常,则myObject或我的myObject['ObjectInfo']是一个数组而不是哈希值。

我怀疑myObject

返回的find_all