json - 从 JSON 中提取数据并使用 jq 将其作为新数据插入
问题描述
我在 JSON 文件中有一些数据库,我已经使用 ./jq 对对象中的一些数据进行了排序和删除,但我坚持在对象中添加新变量。这是我的 JSON 文件的一部分:
{
"Name": "Forrest.Gump.1994.MULTi.1080p.AMZN.WEB-DL.DDP5.1.H264-Ao",
"ID": "SMwIkBoC2blXeWnBa9Hjge9YPs90"
},
{
"Name": "Point.Blank.2019.MULTi.1080p.NF.WEB-DL.DDP5.1.x264-Ao",
"ID": "OZI4mOuBXuJ7b89FLgXJoozyhHe9"
},
{
"Name": "The.Incredible.Hulk.2008.MULTi.2160p.UHD.BluRay.REMUX.HDR.HEVC.DTS-HD.MA.7.1",
"ID": "jZzR4_B_vjm593cYKR7j97XAMv6d"
},
是否可以通过使用 jq 和例如 RegExp 来提取一些数据并将其作为新变量插入到对象中,我希望达到这样的效果:
{
"Name": "Forrest.Gump.1994.MULTi.1080p.AMZN.WEB-DL.DDP5.1.H264-Ao",
"ID": "SMwIkBoC2blXeWnBa9Hjge9YPs90",
"Year": "1994",
"Res": "1080p"
},
{
"Name": "Point.Blank.2019.MULTi.1080p.NF.WEB-DL.DDP5.1.x264-Ao",
"ID": "OZI4mOuBXuJ7b89FLgXJoozyhHe9",
"Year": "2019",
"Res": "1080p"
},
{
"Name": "The.Incredible.Hulk.2008.MULTi.2160p.UHD.BluRay.REMUX.HDR.HEVC.DTS-HD.MA.7.1",
"ID": "jZzR4_B_vjm593cYKR7j97XAMv6d",
"Year": "2008",
"Res": "2160p"
},
提前致谢
解决方案
这是一个解决方案,为简单起见假设您显示的片段来自数组:
map( . as $in
| .Name | capture(".*[.](?<year>[12][0-9]{3})[.](?<rest>.*)")
| .year as $year
| (.rest | split(".") | .[1]) as $res
| $in + {Year: $year, Res: $res} )
希望一旦您熟悉了一些 jq 基础知识,例如map
,capture
和EXP as $var
语法,上面的内容或多或少是不言自明的。
作为单行
这是同样的事情,但作为一个单行:
map(. + (.Name | capture(".*[.](?<Year>[12][0-9]{3})[.](?<Res>.*)") | {Year, Res: (.Res | split(".")[1])}))
推荐阅读
- python - 有条件地替换熊猫数据框子集中的值
- python - Qtile 中的配置错误(平铺窗口管理器)
- c - UNIX 域数据报套接字——服务器没有收到所有记录
- mongodb - MongoDb 聚合框架将字段的所有值推送到数组
- android - 如何在 Android Studio 中创建允许跳转到某一行的链接
- python - 解析节点属性下的xml
- python - 将输出打印为表格
- javascript - ReactJS 中的多选和多选复选框
- laravel - Google Drive API V3 - 需要登录 401 错误
- python - 请需要解决这个问题:ModuleNotFoundError: No module named 'mysql'