【问题标题】:", or } expected while parsing object/hash" error while parsing a JSON file在解析JSON文件时解析对象/哈希时出现错误的“,或}。在解析JSON文件时错误
【发布时间】:2014-09-17 13:04:37
【问题描述】:

我正在尝试打印大型 .json 文件的“名称”字段的内容,但在解析时遇到问题。到目前为止,我已经尝试使用“<:encoding .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

【问题讨论】:

  • 在解码之前尝试打印 $ejson,看看它是否包含你认为的内容。然后查找 File::Slurp :-)
  • 我..哦。好吧,我现在明白为什么它不起作用了,但是为什么会有一个 random ;在 { 开头?如果我啜饮它会解决这个问题吗?
  • 你在哪里看到这个“随机的';'”?
  • 又是一个愚蠢的错误。这 ';'来自 Data::Dumper。我现在明白了,它适用于 File::Slurp。谢谢。
  • 很高兴您自己找到了解决方案!

标签: json perl


【解决方案1】:
my $ejson = <$fh>;

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

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

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

my $ejson = do {
    local $/;
    <$fh>;
};

或者按照 asjo 的建议使用 File::Slurp

【讨论】:

  • 天哪,这是一个愚蠢的错误。上次我解析 JSON 是在使用 reddit API 时,它会将完整的 JSON 文件返回到单个变量中。我完全忘记了上下文。感谢您的澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
相关资源
最近更新 更多