perl - 如何在 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 -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}
推荐阅读
- swift - 当我以编程方式添加我的开关时,我无法在模拟器中切换我的开关
- c - 我可以在 for 循环中使用指针的位置/地址作为终止条件吗?
- dask - 您可以使用 Dask DataFrame 作为 dask.delayed 中的查找表吗?
- go - Golang 模板函数是否可以在引用自身的同时渲染另一个模板?
- c# - WCF接口服务契约实例直接调用函数
- terraform - 如何将变量注入逻辑应用的 Terraform JSON 模板
- python-3.x - KeyError:'id' django-import-export
- javascript - 更新谷歌地图会从表单元素中窃取焦点
- linux - 发现
.so 当只有 .so.n 存在,没有 sudo 权限 - ios - 使用正则表达式从“/:id=”格式的 URL 获取正确的参数值