perl - 如何使用 perl 按顺序获取匹配项
问题描述
我有 +1000 个这样的 json 文件:
({
"Companies": [
{
"company": "COMPANY_1",
"time": "20DAYS"
},
{
"company": "COMPANY_2",
"time": "1DAY"
},
]
})
使用 perl 我怎样才能得到这样的输出:
COMPANY_1:20DAYS,COMPANY_2:1DAY
我正在尝试这个命令
perl -lnE '$x = (split /=/,$ARGV)[4], say "$x:", join ",", /(?<="company":")[^"]*/g,/(?<="time":")[^"]*/g' file.txt
但我得到这样的输出:
COMPANY_1,COMPANY_2,1DAY,20DAYS
期望的输出:
COMPANY_1:20DAYS,COMPANY_2:1DAY
谢谢
解决方案
当这样的事情已经存在时,为什么还要尝试编写自己的 JSON 解析器呢?
请注意,您所拥有的不是 JSON — 您在整个列表周围有额外的括号,在列表末尾有一个额外的逗号 — 但我们可以补偿这些。
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
推荐阅读
- ruby-on-rails - 类中的 NoMethodError#new
- c# - Blazor 依赖注入与简单类
- vue.js - Vue.js 中关于动态元素 $off 的 EventBue 删除了所有重用的组件,而不是一个
- c++ - 数据包访问实践
- go - 由于找不到本地包,无法将 Go 应用程序部署到 GAE
- wordpress - 从 WP Bakery Single Image Block 上传突然失败
- c - Ecore_Job 内存泄漏的可能性?
- javascript - 使用正则表达式提取计量单位
- c# - 使用 IIS 运行一个简单的 ASP.NET Core 应用程序,给出一个空白页
- android - 圆形图像视图未显示