使用变量时,无法从JSON中选择一个字段

时间:2017-06-30 17:41:21

标签: ruby

我试图解析JSON什么是我要求的api响应,但是当我尝试使用变量函数从中选择一个字段时返回变量值。

@json = JSON.parse(request("smth"))

并且在同一个类中(@json在初始化函数中)

def custom args
        args.each do |arg|
          @json[arg]
        end
end

当我使用smth = Class.new时 和下一个smth.custom(['name']) 函数返回我...名称而不是名称值

1 个答案:

答案 0 :(得分:3)

方法args.each遍历数组中的每个项目,然后返回数组。这意味着:

args.each do |arg|
  @json[arg]
end

遍历args中的每个项目,然后返回args。中间的部分@json[arg]实际上什么都不做,因为这些值没有被返回。

如果要检索值,则需要将它们添加到新数组并返回:

def custom args
  values = []
  args.each do |arg|
    values << @json[arg]
  end
  values
end

在Ruby中,更简单的方法是使用map,它根据另一个数组项创建一个数组:

def custom args
  args.map { |arg| @json[arg] }
end

如果您希望custom方法返回包含您指定的name: value对名称的哈希值,则可以使用select

def custom args
  @json.select { |k, v| args.include? k }
end

这会遍历@json哈希中的每个项目,并返回一个新哈希,其中只包含args中列出的密钥。