【发布时间】:2019-08-09 04:54:39
【问题描述】:
假设我有大量元素嵌套在哈希中(来自 JSON)。我想为他们设置吸气剂和二传手。例如:
sub set_element_x{
my ($self, $hash_ref, $value) = @_;
$hash_ref->{'path1'}->{'path2'}->{'x'} = $value;
return;
}
sub get_element_x{
my ($self, $hash_ref, $value) = @_;
return $hash_ref->{'path1'}->{'path2'}->{'x'};
}
是否有处理此路径的标准方法,以便您只需更改一次,以防 JSON 结构发生变化?
我想补充更多信息,因为我认为我没有正确解释自己。
我希望能够将这段代码存储在一个公共位置以访问 JSON 中的值:
->{'path1'}->{'path2'}->{'x'}
未来可能会变成:
->{'path1_1'}->{'path2_1'}->{'path3_1'}->{'x_1'}
PD:如果我使用@stevieb 的答案提供的代码段,我将无法保存我想要的结构。添加这两行:
print Dumper($href) . "\n";
print to_json($href) . "\n";
收益:
$VAR1 = {
'PATH1' => {
'PATH2' => {
'a' => 'aaa',
'b' => 'bbb',
'y' => 'yyy',
'z' => 'zzz'
}
}
};
{"PATH1":{"PATH2":{"a":"aaa","b":"bbb","y":"yyy","z":"zzz"}}}
总结一下。我希望能够存储具有多个不固定键的复杂结构的哈希路径。
【问题讨论】:
-
您可以使用配置文件来定义您的“路径”。在您的 getter/setter/其他相关功能中,您可以只参考 config-file-keys。因此,每当您的 JSON 键发生变化时,您只需在配置文件中进行更改,而不是在所有函数中进行更改。
-
有很多方法(例如this),但是由于必须更改两个位置而不是一个位置,因此是否值得节省额外的运行时费用?
-
您可以通过生成 getter 和 setter 来避免额外的运行时开销。
-
您需要与组织内的某个人讨论如何标准化 API。一次性转换这样的东西很容易,但如果它总是一个猜谜游戏,恕我直言,这项工作不值得。