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)。
顺便说一句,不需要双引号变量。
我有一个我一直在使用的脚本,用户将在其中输入搜索字符串,然后它将 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)。
顺便说一句,不需要双引号变量。