如何获取JSON对象的部分内容

时间:2014-10-02 09:25:16

标签: ruby

我得到TypeError: no implicit conversion of String into Integer无法弄清楚这里有什么问题。

require 'json'

h = '{"name":[{"first":"first ", "last":"last"}], "age":2}'
h = JSON.parse(h)

class C
  def fullname(p)       
    first(p["name"]) + last(p["name"])
  end  
  def age(p)
    p["age"]
  end

private
  def first(name)
    name["first"]
  end
  def last(name)
    name["last"]
  end
 end

C.new.age(h) #=>  2
C.new.fullname(h) #=> TypeError: no implicit conversion of String into Integer

3 个答案:

答案 0 :(得分:1)

h["name"]的结果是name = [{"first" => "first ", "last" => "last"}],这是一个数组。您无法应用name["first"]name["last"]。传递给数组的参数必须是整数。

答案 1 :(得分:1)

名称是一个数组,您有两个选择:

选项A:

为fullname指定数组的元素:

def fullname(elem)       
   first(elem) + last(elem)
end 

并用

调用它
C.fullname(p.first)
例如

选项B:

假设它始终是fullname

中数组的第一个元素
def fullname(p)
   name=p["name"].first
   first(name) + last(name)
end

不要被Array.first混淆,Array.first是Array [0]和你的'first'函数

答案 2 :(得分:0)

"name"是一个数组。 fullname(p)应该阅读

first(p["name"][0]) + last(p["name"][0])