我是perl的新手,这件事让我疯狂。我有一个哈希如下
class TestSource(models.Model):
name = models.CharField(max_length=100, primary_key=True)
我希望将数组元素作为字符串输出,这样我就可以将它们用作循环中的args。我有以下代码
%temp = (
a_collection => [\%first, \%second]
)
我得到了转换为json的部分。我可以把它打印到stdout。现在我想把它写到一个文件。这里$ file应该有名字" first"和"第二"。因此,循环将创建两个文件,其中包含上述哈希中的哈希变量的名称。我希望文件名匹配,以便我可以跟踪创建的内容。
编辑: 基本前提很简单。无论我做什么,无论是json编码等,我都希望哈希变量名称为字符串。所以在上面的数组中,我可以使用任何名称\%somename的哈希,在循环中我想要实际的字符串" somename"在一个不同的变量。如上所述,我可以使用此字符串作为创建的文件名。我无法改变上面的哈希结构。它就在那里,由其他人创建,我只能访问它。
谢谢
答案 0 :(得分:0)
给出以下代码:
use strict;
use warnings;
my %first = (foo => 2, bar => 3, bat => 5);
my %second = (baz => 7, quux => 11);
my %temp = (a_collection => [\%first, \%second]);
for my $href (@{$temp{a_collection}}) {
for my $key (keys(%$href)) {
print "$key: $href->{$key}\n";
}
}
这是产生的输出:
bar: 3
foo: 2
bat: 5
quux: 11
baz: 7
提供新信息后进行编辑:
my %first = (foo => 2, bar => 3, bat => 5);
my %second = (baz => 7, quux => 11);
my %temp = (first => \%first, second => \%second);
for my $key (keys(%temp)) {
print "$key\n";
}
在提供更多新信息后进行编辑:
use JSON::XS;
my %first = (foo => 2, bar => 3, bat => 5);
my %second = (baz => 7, quux => 11);
my %temp = (first => \%first, second => \%second);
for my $key (keys(%temp)) {
open(my $fh, '>', "$key.json") or die $!;
print $fh encode_json($temp{$key});
close($fh);
}
first.json
的内容:
{"foo":2,"bat":5,"bar":3}
second.json
的内容:
{"quux":11,"baz":7}