gpt4 book ai didi

ruby - 如何为包含散列和数组作为值的嵌套散列生成直接访问键?

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:15 27 4
gpt4 key购买 nike

我想比较两个 XML 文件,一个是输入,另一个是输出。我正在将两者都转换成哈希。

我的想法是将输入 XML 中的所有键都转换为散列,然后在输入和输出散列中搜索每个键以找到它们各自的键/值对。

我有一个散列:

{
"requisition_header" => {
"requested_by" => {"login" => "coupasupport"},
"department" => {"name" => "Marketing"},
"ship_to_address" => {"name" => "Address_1431693296"},
"justification" => nil,
"attachments" => [],
"requisition_lines" => [
{
"description" => "Cleaning Services for Building A",
"line_num" => 1,
"need_by_date" => 2010-09-23 07:00:00 UTC,
"source_part_num" => nil,
"supp_aux_part_num" => nil,
"unit_price" => #<BigDecimal:a60520c,'0.3E4',9(18)>,
"supplier" => {"name" => "amazon.com"},
"account" => {
"code" => "SF-Marketing-Indirect",
"account_type" => {"name" => "Ace Corporate"}
},
"currency" => {"code" => "USD"},
"payment_term" => {"code" => "Net 30"},
"shipping_term" => {"code" => "Standard"},
"commodity" => {"name" => "Marketing-Services"}
}
]
}
}

它是嵌套的,所有值都不能直接访问。

我想要一种方法来生成对散列中每个值的直接访问。

例如:

requisition_header.requested_by.login

将访问“coupasupport”。

requisition_header.department.name

将访问“市场营销”。

requisition_header.requisition_lines[0].description

将访问“A 楼清洁服务”。

requisition_header.requisition_lines[0].line_num

将访问“1”。

requisition_header.requisition_lines[0].need_by_date

将访问“2010-09-23 07:00:00 UTC”。

构建的每个键都可用于直接在哈希内搜索值。

最佳答案

这可以通过以下方法完成,将嵌套哈希转换为嵌套 OpenStruct小号:

require 'ostruct'
def deep_structify(hash)
result = {}
hash.each do |key, value|
result[key] = value.is_a?(Hash) ? deep_structify(value) : value
end if hash
OpenStruct.new(result)
end

hash = {"requisition_header"=>{"requested_by"=>{"login"=>"coupasupport"}, "department"=>{"name"=>"Marketing"}, "ship_to_address"=>{"name"=>"Address_1431693296"}, "justification"=>nil, "attachments"=>[], "requisition_lines"=>[{"description"=>"Cleaning Services for Building A", "line_num"=>1, "need_by_date"=>2010-09-23 07:00:00 UTC, "source_part_num"=>nil, "supp_aux_part_num"=>nil, "unit_price"=>#<BigDecimal:a60520c,'0.3E4',9(18)>, "supplier"=>{"name"=>"amazon.com"}, "account"=>{"code"=>"SF-Marketing-Indirect", "account_type"=>{"name"=>"Ace Corporate"}}, "currency"=>{"code"=>"USD"}, "payment_term"=>{"code"=>"Net 30"}, "shipping_term"=>{"code"=>"Standard"}, "commodity"=>{"name"=>"Marketing-Services"}}]}}

struct = deep_structify(hash)

struct.requisition_header.department.name
#=> "Marketing"

关于ruby - 如何为包含散列和数组作为值的嵌套散列生成直接访问键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30260564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com