You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以正确格式向JSON文件添加多条目?Perl代码格式修正求助

问题解决思路与修改代码

看了你的代码和需求,核心问题是你当前把记录数组包裹在了一个哈希的data字段里,导致JSON根结构是对象而非你需要的数组。另外要支持多条记录,我们直接用数组来存储所有条目就可以了。

修改步骤

  • 放弃用哈希包裹数组的写法,直接初始化一个空数组来存储所有记录
  • 要添加新记录时,直接用push向数组中添加哈希引用
  • 编码JSON时,直接传入数组引用,而非哈希引用

修改后的完整代码

#!/usr/bin/perl
use strict;
use warnings;
use JSON;

# 初始化空数组,用来存放所有记录
my @records;

# 添加第一条记录
push @records, {
    data => { user => "myuser", status => "ok" },
    host => "localhost",
    ver => "1.0",
    remote => [ { host => "remotehost", ver => "1.0" } ]
};

# 添加第二条记录(示例,你可以根据需求添加更多)
push @records, {
    data => { user => "myuser", status => "ok" },
    host => "localhost",
    ver => "2.0",
    remote => [ { host => "remotehost", ver => "2.0" } ]
};

# 生成格式化的JSON并输出
my $json_converter = JSON->new->pretty;
print $json_converter->encode(\@records);

输出效果

运行这段代码后,会得到你期望的JSON格式:

[
   {
      "data" : {
         "status" : "ok",
         "user" : "myuser"
      },
      "host" : "localhost",
      "ver" : "1.0",
      "remote" : [
         {
            "host" : "remotehost",
            "ver" : "1.0"
         }
      ]
   },
   {
      "data" : {
         "status" : "ok",
         "user" : "myuser"
      },
      "host" : "localhost",
      "ver" : "2.0",
      "remote" : [
         {
            "host" : "remotehost",
            "ver" : "2.0"
         }
      ]
   }
]

额外说明

如果你的$data_to_json是外部传入的单条记录引用,只需要把它直接push到数组里即可,比如:

# 假设$data_to_json是你获取到的单条记录
my $data_to_json = {
    data => { user => "myuser", status => "ok" },
    host => "localhost",
    ver => "1.0",
    remote => [ { host => "remotehost", ver => "1.0" } ]
};
push @records, $data_to_json;

内容的提问来源于stack exchange,提问作者bsd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:22:35