如何修改Perl脚本生成指定结构的JSON输出?
解决Perl脚本生成目标JSON结构的方案
核心思路
将原服务器对象数组转换为以instance为顶级键的哈希结构:把每个服务器的名称作为instance下的子键,对应值仅存储IP和操作系统信息。
代码示例
use JSON; use strict; use warnings; # 模拟从外部源获取的服务器数据数组 my @servers = ( { server_name => 'server1', ip => '192.168.1.1', os => 'Ubuntu 22.04' }, { server_name => 'server2', ip => '192.168.1.2', os => 'CentOS 7' }, ); # 构建目标JSON对应的哈希结构 my %target_data; foreach my $server (@servers) { # 以服务器名为键,存储IP和OS信息 $target_data{instance}{$server->{server_name}} = { ip => $server->{ip}, os => $server->{os} }; } # 输出压缩格式JSON(如需可读格式化版本,改用注释里的写法) print encode_json(\%target_data); # print JSON->new->utf8->pretty->encode(\%target_data);
关键注意事项
- 确保
server_name字段无重复,否则后续同名称服务器会覆盖之前的条目 - 如果外部源返回的字段名和示例不同(比如不是
server_name),要对应修改哈希键名 - 启用
strict和warnings可提前发现变量拼写、未定义值等问题
内容的提问来源于stack exchange,提问作者Gerry
相关产品推荐
相关产品推荐

