-1

我需要将数据放入 JSON 对象,但因为我使用的是%data哈希并且它具有相同的地址,所以我在我的 JSON 对象中重复获取相同的数据。

这是生成 JSON 的代码。

            while (my ($orderID, $possessorName, $itemDescription, $...) = $sth->fetchrow_array) 
        {
            %data = (orderID => $orderID, possessorName => $possessorName, itemDescription => $itemDescription,...);


            $query_results{"job$index"} = {"data" => \%data};

            $index++;

        }




        return $json_obj->pretty->encode(\%query_results, {ascii => 1, pretty => 1});

问题是我的数据集中的最后一项掩盖了所有以前的项目,所以我最终得到了一个包含相同数据的大型 JSON。我想我可以使用一组哈希值,但这看起来真的很混乱和草率。如何编写最简洁的代码来获取我的数据?如果散列数组是最好的方法,请告诉我,我会做的。我都准备好知道如何或可以自己解决。

4

1 回答 1

1

当您尝试时会发生什么:

my $index = 0;
my %query_results;

while (my ($orderID, $possessorName, $itemDescription, $...) = $sth->fetchrow_array) {
    my %data = (orderID => $orderID, possessorName => $possessorName, itemDescription => $itemDescription,...);
    $query_results{"job$index"}{'data'} = \%data;
    $index++;
}

以前,您使用了%data在外部范围内声明的哈希;或者更糟糕的是,你没有use strict; use warnings这样做%data实际上是一个隐含的全局。现在,我们声明了循环%data 内部,这使得所有的哈希都不同。

您还可以将哈希复制到新的 hashref 中{%data}

也就是说,您甚至不需要该变量:

$query_results{"job$index"}{data} = {
  # anonymous hashref here
  orderID          => $orderId,
  possessorName    => $possessorName,
  itemDescription  => ...
};
于 2013-02-14T05:50:13.453 回答