在解析JSON文件时,"或者}在解析对象/哈希时出错"

pro*_*ree 5 perl json

我正在尝试打印一个大的.json文件的"name"字段的内容,我遇到了解析问题.到目前为止,我已尝试使用"<: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";
}
Run Code Online (Sandbox Code Playgroud)

错误本身就是 , 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

mob*_*mob 6

my $ejson = <$fh>;
Run Code Online (Sandbox Code Playgroud)

是标量上下文中的赋值,因此您只是将输入文件的第一行加载到$ejson.

有很多方法可以将整个输入流加载到标量中:

my $ejson = join '', <$fh>;

my $ejson = do {
    local $/;
    <$fh>;
};
Run Code Online (Sandbox Code Playgroud)

或者使用File::Slurpasjo建议.