gpt4 book ai didi

json - 访问解码为 HASH 和哈希引用数组的 JSON

转载 作者:行者123 更新时间:2023-12-05 01:24:34 28 4
gpt4 key购买 nike

鉴于以下转储程序输出,是否有一种方法可以遍历每个散列以仅列出每个 results->id 记录下的项目?我希望能够说这样的话:

打印 $results{1342}{'domain'};

并让语句返回 testing11.com 作为结果。

我是否必须先通读所有 results 数组,然后使用 $results[$counter]{id} 访问其中的数据?我不确定如何继续。

$VAR1 = { 
'end_time' => 1466017739,
'options' => {
'hour_offset' => '00',
'timezone' => 'America/New_York'
},
'field_headers' => {
'priority' => 'Priority',
'status' => 'Status',
'assignee_external_id' => 'Assignee external id',
'initially_assigned_at' => 'Initially assigned at'
},
'results' => [
{
'priority' => 'High',
'status' => 'Open',
'domain' => 'testing11.com',
'generated_timestamp' => 1546547669,
'id' => 1342
},
{
'priority' => 'Low',
'status' => 'Open',
'domain' => 'testing22.com',
'generated_timestamp' => 1464567669,
'id' => 7062
},
{
'priority' => 'Low',
'status' => 'Closed',
'domain' => 'testing33.com',
'generated_timestamp' => 1464267669,
'id' => 432
}]
}

最佳答案

您的转储显示一个哈希引用,其中包含一个标量、两个哈希引用和一个数组引用。 arrayref 具有元素的 hashrefs。如果要从中检索特定元素,则需要知道索引。

$top_level->{results}->[0]->{domain};  # is 'testing11.com'
$top_level->{results}->[0]->{status}; # is 'open'

遍历它取消引用数组

foreach my $result (@{ $top_level->{results} }) {
print "$result->{id}\n";
}

或者您可以从所有 results 元素中获取特定键的值,例如 id

my @ids = map { $_->{id} } @{ $top_level->{results} };
say "@ids";

打印

1342 7062 432

Note that with nested structures, which contain references, you can also use syntax

$top_level->{results}[0]{domain};  # is 'testing11.com'  

-> 在下标之间是可选的,参见Using References in perlref 中的规则 3。 .

当哈希键是字符串时,它们应该被引用

$top_level->{'results'}[0]{'domain'};

但是,语法快捷方式允许我们省略裸词上的引号。但是,如果 {} 中有除裸词以外的任何内容,它将被解释为表达式并求值。因此,如果有任何疑问,请使用引号。您需要始终保持一致的符号。

资源:教程 perlreftut , 引用 perlref和数据结构食谱,perldsc .


stevieb 中给出了一个直接的解决方案的答案,创建反向查找。复制在这里供引用

my $results = $VAR1->{results};

my %by_ip = map {$_->{id} => $_} @$results;

print "$by_ip{1342}->{domain}\n";

关于json - 访问解码为 HASH 和哈希引用数组的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37845433/

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