我正在尝试用 perl 解析一个 json 文件。我想提取键“名称”及其对应的值。
我的文件看起来像这样
{
"data":[
{
"name":"ABC",
"id":"123",
},
{
"name":"PQR",
"id":"456",
},
{
"name":"XYZ",
"id":"789",
}
]
}
我正在尝试使用以下代码:
#/usr/lib/perl
use lib qw( ..);
use LWP::Simple;
use JSON;
my $filename = '/file.txt';
my $data;
if (open (my $json_str, $filename))
{
local $/ = undef;
my $json = JSON->new;
$data = $json->decode(<$json_str>);
close($json_stream);
}
print $data->{name};
但我没有得到任何输出。
谁能告诉我出了什么问题?
请您参考如下方法:
您的 json 文件无效。
第 5、10、15 行不应以逗号结尾,因为这是这些散列的最后一个键/值对。
修复此问题后,这里是您的代码版本,可为您提供预期结果:
#/usr/lib/perl
use strict;
use warnings;
use lib qw(..);
use JSON qw( );
my $filename = 'file.txt';
my $json_text = do {
open(my $json_fh, "<:encoding(UTF-8)", $filename)
or die("Can't open \$filename\": $!\n");
local $/;
<$json_fh>
};
my $json = JSON->new;
my $data = $json->decode($json_text);
for ( @{$data->{data}} ) {
print $_->{name}."\n";
}
一些问题:
$json_stream和 $json_str .您打算使用 $json_stream在所有地方表示文件句柄 $data->{name}应该应用于 .json 文件中数组的所有成员,而不是 json 本身。所以你需要先遍历它们 调试时,请确保您的 json 有效。要么通过 jsonlint.com或 json_xs JSON::XS 附带的实用程序来自 cpan。
JSON 可以描述复杂的数据结构,因此当您将其解析为 Perl 时,您也会得到一个复杂的数据结构。首先尝试使用 Data::Dumper 查看数据结构或 Data::Printer或 Data::TreeDumper




