从rubygems.org/gems/JSON下载的JSON gem-1.8.1的响应

从rubygems.org/gems/JSON下载的JSON gem-1.8.1的响应,ruby,json,Ruby,Json,我已经下载了rubygems.org/gems/json/json-1.8.1.gemgem来解析json请求 JSON.parse(strResponseBody)方法的预期O/p是散列“ 如果我们在以下JSON字符串上打印JSON.parse的输出: {"BodyStyles":[{"k":"Car"},{"k":"Truck"},{"k":"SUV/Crossover"}]} 我们得到以下输出: {"BodyStyles"=>[{"k"=>"Car"}, {"k"=&g

我已经下载了rubygems.org/gems/json/json-1.8.1.gemgem来解析json请求

JSON.parse(strResponseBody)
方法的预期O/p是散列“

如果我们在以下JSON字符串上打印JSON.parse的输出:

   {"BodyStyles":[{"k":"Car"},{"k":"Truck"},{"k":"SUV/Crossover"}]}
我们得到以下输出:

{"BodyStyles"=>[{"k"=>"Car"}, {"k"=>"Truck"}, {"k"=>"SUV/Crossover"}]} 
当我执行以下代码时,我得到的输出是“数组哈希”

   result.each{|keys,values|
      puts values.class                 ====> Coming as Array.
      values.each{|key,value|
        puts key                        ====> O/P: {"k"=>"Car"} instead of "Car"
      }
      } 
有人曾经面对过这个问题吗

请帮忙找工作

提前谢谢。 当做
Prasant Sutaria

首先,我不确定您是否需要安装JSON gem,因为我认为它已经被移植到Ruby中,使用Ruby 1.9.3及更高版本,您需要做的就是
需要“JSON”
,然后回到您的代码中

{"BodyStyles"=>[{"k"=>"Car"}, {"k"=>"Truck"}, {"k"=>"SUV/Crossover"}]} 

result.each{|keys,values|
  puts values.class                # The key here is "BodyStyles" and the values is an array  
  values.each{|ele|          #since values is an Array ([{"k"=>"Car"}, {"k"=>"Truck"}, {"k"=>"SUV/Crossover"}]) then you should not do "values.each{|key,value|"
    ele.values.first         #It seems you are only interested in the values from the Hash in this case "Car", the assumption here is that you have only one key value mapping, else you might need to use ele.values instead
  }
}

写这篇文章有更简短、更优雅的方式,但这取决于你自己。看一看,结果是正确的。您缺少的是整个散列是

result = {"BodyStyles"=>[{"k"=>"Car"}, {"k"=>"Truck"}, {"k"=>"SUV/Crossover"}]} 
这意味着当你执行

result.each { |keys,values| }
每个将使用参数执行一次(主哈希中只有一个项)

keys = "BodyStyles" (string)
values = [{"k"=>"Car"}, {"k"=>"Truck"}, {"k"=>"SUV/Crossover"}] (Array)
这就是为什么要发表声明的原因

puts values.class
打印阵列。要达到您想要的效果,请使用

result["BodyStyles"].each { |items|
  puts items["k"]
}