IT干货网

json之使用perl解析json文件

lhb25 2025年12月25日 编程设计 44 0

我正在尝试用 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.comjson_xs JSON::XS 附带的实用程序来自 cpan。

    JSON 可以描述复杂的数据结构,因此当您将其解析为 Perl 时,您也会得到一个复杂的数据结构。首先尝试使用 Data::Dumper 查看数据结构或 Data::PrinterData::TreeDumper


    评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!