使用perl解析json文件

前端之家收集整理的这篇文章主要介绍了使用perl解析json文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_2@
我试图在perl中解析一个json文件.我想提取关键字“名称”及其对应的值.
我的文件看起来像这样 @H_502_8@

@H_502_8@

{
 "data":[
    {
        "name":"ABC","id":"123",},{
        "name":"PQR","id":"456",{
        "name":"XYZ","id":"789",}
]
}
@H_502_8@我正在尝试下面的代码

@H_502_8@

#/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};
@H_502_8@但我没有得到任何输出.

@H_502_8@谁能告诉我什么是错的?

解决方法

您的json文件无效. @H_502_8@

@H_502_8@第5,10,15行不应以逗号结尾,因为这是这些哈希的最后一个键/值对.

@H_502_8@解决之后,这里有一个代码版本,可以为您提供预期的结果:

@H_502_8@

#/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";
}
@H_502_8@一些问题:

@H_502_8@>您使用的是$json_stream和$json_str.你打算在所有地方使用$json_stream来表示文件句柄
> $data-> {name}应该应用于.json文件中数组的所有成员,而不是json本身.所以你需要先迭代它们

@H_502_8@调试时,请确保您的json有效.从cpan到0700或JSON::XS附带的json_xs实用程序.

@H_502_8@JSON可以描述复杂的数据结构,因此当您将其解析为Perl时,您也会获得复杂的数据结构.首先尝试使用Data::DumperData::PrinterData::TreeDumper查看数据结构

@H_502_2@

猜你在找的Perl相关文章