-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});

問題は、データ セットの最後のアイテムが前のすべてのアイテムをマスクしているため、まったく同じデータの 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 で を宣言します。

によって、ハッシュを新しいハッシュリファレンスにコピーすることもできます{%data}

つまり、その変数さえ必要ありません。

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