2013-09-24 49 views
-1

我正在研究接收json文件(来自Flurry API)的Ruby代码并创建另一个json友好格式为“状态委员会”应用程序。当使用此JSON片段:Ruby:读取json文件获取`[]':无法将字符串转换为整数(TypeError)

"country":[{"@country":"US","day":[{"@date":"2013-09-20","@value":"1"}, 
{"@date":"2013-09- 23","@value":"1"}]}, 
{"@country":"KR","day":{"@date":"2013-09-20","@value":"1"}} 

一切工作正常,但是当代码读“KR”,然后“天”(注意缺少“[]”),我收到以下错误:

  • `[]':不能转换成字符串整数(类型错误)

我用于读取原始JSON文件中的代码是:

countries = response.parsed_response["country"] 
    countries.each do |datapoint| 
     countryName = datapoint["@country"] 
     days = datapoint["day"] 
     data = [] 
     days.each do |datapoint2| 
      value = datapoint2["@value"] 
      date = Date.parse(datapoint2["@date"]) 
      dateString = date.strftime(dateFormat) 
      data << { :title => dateString, :value => value } 
     end 
     dataSequences << { :title => countryName, :color => metric[:color], :datapoints => data 
    } 
    end 

我在Ruby中是一种noob,所以...在读取json文件时可以添加括号以避免此错误?

+0

哪条线是由你的错误指出的? 编辑:你可能将'String'实例传递给'Array#[]'方法。 –

+0

错误在之后显示:“days.each do | datapoint2 |”。它没有阅读“@value”或“@date”(我都试过)。当我打印datapoint2时,它显示:{“@date”:“2013-09-20”,“@ value”:“1”} - >没有括号。 – Jesod

回答

0

Ruby包含一些你可能会觉得有用的强制类型方法。

首先是Array(),这将它的参数转换成一个阵列,除非参数已经之一,它这种情况下它简单地返回参数:

Array(1) #=> [1] 
Array([1,2,3]) #=> [1,2,3] 

有点烦人,供给单个散列时,其转换散列成阵列的阵列(在散列键值对):

Array({ a: 1, b: 2}) #=> [[:a, 1], [:b, 2]] 

然而,也有一个Hash[]方法,将其结果转换回一个哈希值,但是单独离开现有散列:

Hash[ [[:a, 1], [:b, 2]] ] #=> { a: 1, b: 2 } 

因为你的“天”关键是有时哈希的数组,有时一个哈希,你可以在你的方法使用这些以确保您的迭代和查找按预期工作:

Array(datapoint["day"]).each do |datapoint2| 
    dp2_hash = Hash[datapoint2] 
    # ... etc, substituting future mentions of datapoint2 with dp2_hash 
相关问题