Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何访问属于特定值的嵌套值_Json_Ruby - Fatal编程技术网

Json 如何访问属于特定值的嵌套值

Json 如何访问属于特定值的嵌套值,json,ruby,Json,Ruby,我访问一些数据有困难 我有这个档案: SUPPLIERS = [ { name: "FunePlus", advitam_grade: 3, works: [ { type: "embalming", price: 350 }, {type: "transport_before_casketing", price: 450} ]}, { name: "FuneTop", works: [ { type: "graving", price: 10 } ]}, { name: "FuneTruc",

我访问一些数据有困难

我有这个档案:

SUPPLIERS = [
{ name: "FunePlus", advitam_grade: 3, works: [ { type: "embalming", price: 350 }, {type: "transport_before_casketing", price: 450} ]},
{ name: "FuneTop", works: [ { type: "graving", price: 10 } ]},
{ name: "FuneTruc", advitam_grade: 5, works: [ { type: "embalming", price: 750 }]},
{ name: "FuneCorp", advitam_grade: 2, works: [ { type: "digging", price: 350 }]}
]



class SelectSupplier
  def self.global_grade(name)

  end
end

SelectSupplier.global_grade("FunePlus")
当我调用方法
global\u grade
时,我想加入一个特定的名称,然后返回相关的值

以下是我想要的输出:

SelectSupplier.global_grade("FunePlus")
 :advitam_grade=>3, :works=>[{:type=>"embalming", :price=>350}, {:type=>"transport_before_casketing", :price=>450}]}

你们中有人知道我怎么做吗

您可以使用
Array#find
方法:

SUPPLIERS = [
{ name: "FunePlus", advitam_grade: 3, works: [ { type: "embalming", price: 350 }, {type: "transport_before_casketing", price: 450} ]},
{ name: "FuneTop", works: [ { type: "graving", price: 10 } ]},
{ name: "FuneTruc", advitam_grade: 5, works: [ { type: "embalming", price: 750 }]},
{ name: "FuneCorp", advitam_grade: 2, works: [ { type: "digging", price: 350 }]}
]



class SelectSupplier
  def self.global_grade(name)
      SUPPLIERS.find {|x| x[:name] == name }
  end
end

SelectSupplier.global_grade("FunePlus")

这将返回与
名称
参数匹配的第一个哈希值

您可以使用
数组#find
方法:

SUPPLIERS = [
{ name: "FunePlus", advitam_grade: 3, works: [ { type: "embalming", price: 350 }, {type: "transport_before_casketing", price: 450} ]},
{ name: "FuneTop", works: [ { type: "graving", price: 10 } ]},
{ name: "FuneTruc", advitam_grade: 5, works: [ { type: "embalming", price: 750 }]},
{ name: "FuneCorp", advitam_grade: 2, works: [ { type: "digging", price: 350 }]}
]



class SelectSupplier
  def self.global_grade(name)
      SUPPLIERS.find {|x| x[:name] == name }
  end
end

SelectSupplier.global_grade("FunePlus")

这将返回与您的
名称
参数匹配的第一个哈希值

@John告诉您如何提取所需的哈希值。如果您希望多次这样做,对于键<代码>名称< /代码>的不同值,您应该考虑一次性构造哈希来加快查找速度。

SUPPLIERS = [
  { name: "FunePlus", advitam_grade: 3, works: [ { type: "embalming", price: 350 }, 
    { type: "transport_before_casketing", price: 450} ]},
  { name: "FuneTop",                    works: [ { type: "graving", price: 10 } ]},
  { name: "FuneTruc", advitam_grade: 5, works: [ { type: "embalming", price: 750 }]},
  { name: "FuneCorp", advitam_grade: 2, works: [ { type: "digging", price: 350 }]}
]

class SelectSupplier
  @supplier_index = SUPPLIERS.each_with_index.with_object({}) { |(g,i),h| h[g[:name]] = i }
  def self.global_grade(name)
    SUPPLIERS[@supplier_index[name]]
  end
end

SelectSupplier.global_grade("FunePlus")
  #=> {:name=>"FunePlus", :advitam_grade=>3, :works=>[{:type=>"embalming", :price=>350},
  #     {:type=>"transport_before_casketing", :price=>450}]}
散列
@supplier\u index
等于以下值

SelectSupplier.instance_variable_get(:@supplier_index)
  #=> {"FunePlus"=>0, "FuneTop"=>1, "FuneTruc"=>2, "FuneCorp"=>3}

请注意,我可以用与
供应商
元素(哈希)相等的值构造
@supplier\u index
,但这会增加内存需求(当然,这可能不是问题)。

@John已经告诉您如何提取所需的哈希。如果您希望多次这样做,对于键<代码>名称< /代码>的不同值,您应该考虑一次性构造哈希来加快查找速度。

SUPPLIERS = [
  { name: "FunePlus", advitam_grade: 3, works: [ { type: "embalming", price: 350 }, 
    { type: "transport_before_casketing", price: 450} ]},
  { name: "FuneTop",                    works: [ { type: "graving", price: 10 } ]},
  { name: "FuneTruc", advitam_grade: 5, works: [ { type: "embalming", price: 750 }]},
  { name: "FuneCorp", advitam_grade: 2, works: [ { type: "digging", price: 350 }]}
]

class SelectSupplier
  @supplier_index = SUPPLIERS.each_with_index.with_object({}) { |(g,i),h| h[g[:name]] = i }
  def self.global_grade(name)
    SUPPLIERS[@supplier_index[name]]
  end
end

SelectSupplier.global_grade("FunePlus")
  #=> {:name=>"FunePlus", :advitam_grade=>3, :works=>[{:type=>"embalming", :price=>350},
  #     {:type=>"transport_before_casketing", :price=>450}]}
散列
@supplier\u index
等于以下值

SelectSupplier.instance_variable_get(:@supplier_index)
  #=> {"FunePlus"=>0, "FuneTop"=>1, "FuneTruc"=>2, "FuneCorp"=>3}

请注意,我可以用与
供应商
元素(哈希)相等的值构建
@supplier\u index
,但这会增加内存需求(当然,这可能不是问题)。

尝试
选择supplier.global\u grade(“FunePlus”)时会得到什么结果
?尝试选择Supplier.global_grade(“FunePlus”)时会得到什么结果?