arrays - 创建包含多个变量的 JSON 数组
问题描述
我想修改我的 Perl 脚本以使用json_encode函数输出变量列表,但我不确定如何。
这是我未修改的 Perl 脚本的输出:
Vicia_sativa = Vicia_sativa.png
Geranium_maculatum = Geranium_maculatum.png
Narcissus_pseudonarcissus = Narcissus_pseudonarcissus1.png Narcissus_pseudonarcissus2.png
Polygonum_persicaria = Polygonum_persicaria1.png Polygonum_persicaria2.png
Corylus_americana = Corylus_americana1.png Corylus_americana2.png
等号左边的变量是植物名称,等号右边的一个或多个文件名是植物照片。请注意,这些文件名没有用逗号分隔。
这是生成上述输出的 Perl 脚本:
#!/usr/bin/perl
use strict;
use warnings;
use English; ## use names rather than symbols for special variables
my $dir = '/Users/jdm/Desktop/xampp/htdocs/cnc/images/plants';
opendir my $dfh, $dir or die "Can't open $dir: $OS_ERROR";
my %genus_species; ## store matching entries in a hash
for my $file (readdir $dfh)
{
next unless $file =~ /.png$/; ## entry must have .png extension
my $genus = $file =~ s/\d*\.png$//r;
push(@{$genus_species{$genus}}, $file); ## push to array,the @{} is to cast the single entry to a reference to an list
}
for my $genus (keys %genus_species)
{
print "$genus = ";
print "$_ " for sort @{$genus_species{$genus}}; # sort and loop though entries in list reference
print "\n";
}
请告知如何在JSON数组中输出这些变量。谢谢。
更新...这是修订后的脚本,其中包含每个论坛成员的建议更改:
#!/usr/bin/perl
use strict;
use warnings;
use JSON::PP;
use English; ## use names rather than symbols for special variables
my $dir = '/Users/jdm/Desktop/xampp/htdocs/cnc/images/plants';
opendir my $dfh, $dir or die "Can't open $dir: $OS_ERROR";
my %genus_species; ## store matching entries in a hash
for my $file (readdir $dfh)
{
next unless $file =~ /.png$/; ## entry must have .png extension
my $genus = $file =~ s/\d*\.png$//r;
push(@{$genus_species{$genus}}, $file); ## push to array,the @{} is to cast the single entry to a reference to an list
}
print(encode_json(\%genus_species));
这个修改后的代码有效!但是,文件名不再排序。任何想法如何将排序合并到encode_json函数中?
解决方案
实际上非常简单......您可以使用JSON::PP 模块并将哈希的引用传递给encode_json()
.
#!/usr/bin/perl
use strict;
use warnings;
use JSON::PP;
# your other code goes here...
# instead of `for my $genus (keys %genus_species) { ... }` do:
print(encode_json(\%genus_species));
推荐阅读
- javascript - 试图在 javaScript 中增加 simon 游戏级别
- java - 堆栈类分隔元素
- flutter - 错误:未找到:'dart:ui' import 'dart:ui' - Flutter
- c - C语言:如何使用字符串从n中找到由数字创建的最大数
- reactjs - react Modal被Portal包围时出错
- reactjs - 在 TSX 上使用按钮验证文本框
- python - 使用 seaborn 循环轴以创建散点图
- javascript - 当 JSON 循环找到匹配项时修改 html
- c++ - 从指针获取函数参数
- python - Tensorflow 2.x 计算并最小化损失(相同步骤)