JSON 来自数组打印无效 json

JSON from array prints invalid json

我有一个我一直在使用的脚本,用户将在其中输入搜索字符串,然后它将 return 搜索的 json 结果。但是,我不得不进行更改,让脚本在 table 中搜索数据并打印 json 结果。我创建了一个 for 循环来执行此任务。 (发布了 for 循环的示例,这是此处唯一相关的部分):

#!/bin/perl
use strict;
use warnings;
use JSON;
$json = JSON->new->allow_nonref;
...
foreach (...) {
      my $object = {name => "$name", surname => "$surname", age => "$age"}, 'response';
      my $result = $json->encode($object);
      print "$result";
  }

这完全符合它的用途,并以有效的 json 格式打印每个元素(手动使其漂亮):

{
   "name" : "Sarah",
   "surname" : "O'Conner",
   "age" : "89"
}
{
   "name" : "John",
   "surname" : "Smith",
   "age" : "32"
}

问题是每个 json 元素都是有效的,但作为多个根元素是无效的。我反而需要这个:

[
   {
      "name":"Sarah",
      "surname":"O'Conner",
      "age":"89"
   },
   {
      "name":"John",
      "surname":"Smith",
      "age":"32"
   }
]

我尝试了 20 种不同的方法,但我就是无法解决这个问题。谁能帮我解决这个问题?如何获得作为多根元素和单独元素的结果?

您在错误的过程中进行了 JSON 转换。您应该创建一个记录数组并进行转换,而不是转换每个单独的记录。

#!/bin/perl
use strict;
use warnings;
use JSON;
$json = JSON->new->allow_nonref;
...
my @objects;

foreach (...) {
      my $object = {name => "$name", surname => "$surname", age => "$age"};
      push @objects, $object;
}

my $result = $json->encode(\@objects);
print "$result";

创建一个“对象”数组(在 Perl 中称为 hashes)并对其进行编码:

my @objects;
foreach (...) {
      push @objects, {name => $name, surname => $surname, age => $age};
}
my $result = $json->encode(\@objects);
print $result;

如果您向我们展示 ... 部分,我们可能会向您展示如何在不推送的情况下直接将其转换为 @objects(例如使用 map)。

顺便说一句,不需要双引号变量。