首页 > 解决方案 > 如何在 Perl 中忽略格式错误的 JSON 字符串

问题描述


我的文件夹中有 +1000 个 json 文件,当我尝试从 +1000 个文件中解析数据时,在 +100 解析后出现此错误:

malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "(end of string)") at -e line 1.

请如何忽略这个错误让命令解析所有文件。
我的命令:

perl -MJSON::XS -CS -0777ne'
   BEGIN { $j = JSON::XS->new->relaxed(1) }
   s/^\(//;  s/\)\z//;
   CORE::say
      join ",",
         map { join ":", $_->{company}, $_->{time} }
            @{ $j->decode($_)->{Companies} }
' *.json

谢谢

标签: perl

解决方案


尝试使用eval从以下位置捕获异常decode()

perl -MJSON::XS -CS -0777ne'
   BEGIN { $j = JSON::XS->new->relaxed(1) }
   s/^\(//;  s/\)\z//;
   eval { $j->decode($_) };
   next if $@;
   CORE::say
      join ",",
         map { join ":", $_->{company}, $_->{time} }
            @{ $j->decode($_)->{Companies} }
' *.json

注意:如果文件很大,您可以通过将解码后的变量存储在 eval 块中来节省时间(通过不解码文件两次):eval { $data = $j->decode($_) }然后使用$data->{Companies}


推荐阅读