如何以正确的格式将更多 JSON 条目添加到文件中?

How to add more JSON entries into file with right format?

我正在尝试通过给定输入添加到 JSON,但输出格式与预期不同。请建议此代码所需的任何更改。为了测试,我通过 $data_to_json 传递一个条目,但我需要将许多类似的行传递给 JSON 文件。

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use JSON;
my $json = JSON->new;

my %data;
my $data_to_json = [ {data=>{user=>"myuser",status=>"ok"}, "host"=>"localhost","ver"=>"1.0", "remote"=> [{"host"=>"remotehost","ver"=>"1.0"}] } ];
$data{data} = $data_to_json;
my $convert = JSON->new->pretty;
print $convert->encode(\%data);

它 returns 以下输出不是预期的:

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

我正在查看以下结果格式(有不止一条像下面这样的记录我需要添加到 JSON)

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

外部结构不是JSON说法中的对象(或Perl 说法中的散列),而是数组。使用 push 向数组添加元素。另外,数据也可以简化:不需要将object/hash存储在数组中,直接使用object/hash即可。

my @data;
my $data_to_json = { data   => { user => 'myuser', status => 'ok' },
                     host   => 'localhost',
                     ver    => '1.0',
                     remote => [ { host => 'remotehost', ver => '1.0' } ] };
push @data, $data_to_json;
my $convert = JSON->new->pretty;
print $convert->encode(\@data);