我正在尝试打印一个大型.json文件的“name”字段的内容,我遇到了解析问题。到目前为止,我已尝试使用“&lt ;: encoding(UTF-8)”打开.json文件,但到目前为止还没有运气。
这是我的代码,错误在第11行:
#!/usr/bin/perl
use strict;
use warnings;
use JSON;
open(my $fh, "<:encoding(UTF-8)", "pokedex.json");
my $ejson = <$fh>;
close($fh);
my $djson = decode_json $ejson;
for(my $i=1;$i<=718;$i++){
print $djson->{"$i"}{"name"}, "\n";
}
错误本身是, or } expected while parsing object/hash, at character offset 1 (before "\n") at jsonreverser.pl line 11.
我通过在线验证程序运行了.json文件,它说它格式正确。这是json文件的链接:http://vps.zazez.com/junk/pokedex.json
答案 0 :(得分:6)
my $ejson = <$fh>;
是标量上下文中的赋值,因此您只将输入文件的第一行加载到$ejson
。
有很多方法可以将整个输入流加载到标量中:
my $ejson = join '', <$fh>;
my $ejson = do {
local $/;
<$fh>;
};
或者使用File::Slurp
asjo建议。