我在Perl程序中使用json文件。我无法解析json文件。
出现以下错误:
print "input json";
open(my $f, "<", "$ARGV[1]");
my $content=<$f>;
my $structured;
eval {
$structured = from_json($content, {utf8 => 1});
};
if ($@) {
$content =~ s/\n/ /g;
my $errMsg = $@;
$errMsg =~ s/\n/ /g;
WriteInfo("Unparseable result for url=$url, error: $errMsg\n") ;
};
以下是代码:
{{1}}
如何解决此错误?
答案 0 :(得分:4)
如何解决此错误?
您无法自动修复JSON数据。可能有许多修复&#34;这将通过解析器获取数据,但可能很难分辨哪些是正确的。您应该与数据来源交谈,并要求提供正确的版本
可以手动修复数据,但只有在没有正确版本的数据时才应尝试此操作。手动查找2.2MB +文本文件中的错误并不是一件容易的事,并且字符位置2326471只是解析器找到错误的地方,而不是应该进行更正的地方
JSON对象后的垃圾...
这意味着from_json
找到了JSON数据的结尾 - 即最后的右括号}
或括号]
- 但是在该字符后面的字符串中有数据。可能是文件已正确写入,但在JSON结束后确实存在虚假数据。如果是这样,那么只需检查数据文件
除非您重新定义了$/
变量,否则这些行
open(my $f, "<", "$ARGV[1]");
my $content = <$f>;
只会将文件的第一行读入$content
。可能是该文件只包含一个非常长的tex行(即它不包含换行符)但在错误处理程序中包含此行
$content =~ s/\n/ /g;
暗示其中的是换行符。
只读取多行JSON文件的第一行不会导致您看到的错误,但最好将整个文件读入内存,然后再将其解码为JSON数据,如果意外的换行已经进入数据
这是编写代码段的更好方法
print "Input JSON\n";
my $content - do {
open my $fh, '<', $ARGV[1] or die qq{Unable to open "$ARGV[1]" for input: $!};
local $/;
<$fh>;
};
my $structured = eval {
from_json( $content, {utf8 => 1} );
};
if ( my $err_msg = $@ ) {
$content =~ tr/\n/ /;
$err_msg =~ tr/\n/ /;
WriteInfo("Unparsable result for URL=$url, error: $err_msg\n") ;
};