@H_502_2@
我试图在perl中解析一个json文件.我想提取关键字“名称”及其对应的值.
我的文件看起来像这样 @H_502_8@ @H_502_8@
我的文件看起来像这样 @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@
> $data-> {name}应该应用于.json文件中数组的所有成员,而不是json本身.所以你需要先迭代它们 @H_502_8@调试时,请确保您的json有效.从cpan到0700或JSON::XS附带的json_xs实用程序. @H_502_8@JSON可以描述复杂的数据结构,因此当您将其解析为Perl时,您也会获得复杂的数据结构.首先尝试使用Data::Dumper或Data::Printer或Data::TreeDumper查看数据结构
#/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::Dumper或Data::Printer或Data::TreeDumper查看数据结构
@H_502_2@