如何以正确格式向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
相关产品推荐
相关产品推荐

