Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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
Arrays Ruby-从嵌套哈希数组中提取数组_Arrays_Ruby_Hash - Fatal编程技术网

Arrays Ruby-从嵌套哈希数组中提取数组

Arrays Ruby-从嵌套哈希数组中提取数组,arrays,ruby,hash,Arrays,Ruby,Hash,我正在尝试从以下内容获取哈希: response: {"result": [ { "LEID": "123", "result": [ { "CCID": "456", "result": [ { "Amount": 10000, "NNID": "789" } ] }, { "CCID": "ABC", "result":

我正在尝试从以下内容获取哈希:

 response: 
 {"result": [
 {
  "LEID": "123",
  "result": [
    {
      "CCID": "456",
      "result": [
        {
          "Amount": 10000,
          "NNID": "789"
        }
      ]
    },
    {
      "CCID": "ABC",
      "result": [
        {
          "Amount": 5000,
          "NNID": "DEF"
        }
      ]
    }
  ]
}
]
}
我想做的是把以下内容弄出来:

{“LEID”:123,“CCID”:456,“NNID”:789}

{“LEID”:123,“CCID”:ABC,“NNID”:DEF}

那就让LEID、CCID和NNID三人一组

到目前为止,我得到的是:

  LEID_collection = response['result']
  LEID = LEID_collection.map {|h| h['LEID']}
  LEID = LEID.reduce
  CCID_collection = LEID_collection.reduce
  CCIDs = CCID_collection['result'].map {|h|h['CCID']}
  CCID1 = CCIDs[0]
  CCID2 = CCIDs[1]
  CCIDs = CCID_collection['result']
  test = CCIDs.first.keys.zip(CCIDs.map(&:values).transpose).to_h
  test2 = test['result']
  test3 = test2.flatten
  test4 = test3.map {|h| h['NNID']}
  NNID1 = test4[0]
  NNID2 = test4[1]

  hash1 = Hash["LEID", LEID, "CCID", CCID1, "NNID", NNID1]
  puts "hash 1 :" +  hash1.to_s
  hash2 = Hash["LEID", LEID, "CCID", CCID2, "NNID", NNID2]
  puts "hash 2 :" +  hash2.to_s
这得到了我想要的,但真的不是动态的。。。还有更好的办法吗


对不起,这是多么复杂,我只是不知道如何解释它的任何其他方式。乐意回答任何问题

如果您知道您将始终使用这种结构,并且使用ruby>=2.3.0, 然后,您可以使用该方法缩短时间:

collection = response['result'].first
trios = collection['result'].map do |ccid|
  {
    'LEID' => collection['LEID'],
    'CCID' => ccid['CCID'],
    'NNID' => ccid.dig('CCID', 'NNID')
  }
end

它只是稍微短一点,但希望更容易阅读整体

对不起,你是对的,我需要编辑我的评论,使用{}来显示我想要的是散列而不是数组-谢谢你指出这一点。对不起,我对这一切都不熟悉。谢谢你,我会看一看的-不幸的是,这只是第一步,因为我知道稍后我会在CCID下有更多的NNID…并且必须组成三个…但这可能是一个好的开始!如果需要,在2.3之前,您可以链接
。尝试(:[],:key)
作为
:dig
的替代品。虽然不漂亮,但却能达到同样的目的。
try
只在你心里起作用。