我正在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"}}
什么可能导致我得到“无法将字符串转换为整数”类型错误?
答案 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