繁体   English   中英

使用 jq 从 JSON 中提取数据并插入新数据

[英]Extract data from JSON and insert it as new by using 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基础知识,例如mapcaptureEXP as $var语法,上面的内容或多或少是不言而喻的。

作为单线

这是同一件事,但单线:

map(. + (.Name | capture(".*[.](?<Year>[12][0-9]{3})[.](?<Res>.*)") | {Year, Res: (.Res | split(".")[1])}))

这是一种替代方法,如何使用基于jtc -path的unix实用程序jtc对您的ask执行JSON操作。

假设您的json位于文件database.json中

bash $ <database.json jtc -w'[Name]:<\.([12]\d{3})\.[^.]+\.([^.]+)>R:[-1]' -mi0 -T'{"Year":{$1}}' -i0 -T'{"Res":"{$2}"}'
[
   {
      "ID": "SMwIkBoC2blXeWnBa9Hjge9YPs90",
      "Name": "Forrest.Gump.1994.MULTi.1080p.AMZN.WEB-DL.DDP5.1.H264-Ao",
      "Res": "1080p",
      "Year": 1994
   },
...

这里的insert-options( -i )保留了一个虚拟JSON( 0 ),因为两者都将进行模板插值,从而用插值的JSON值(用于YearRes记录)完全替换该虚拟。

插值将从匹配的Name记录的各个记录的REGEX组( $0$1 )中进行

PS>披露:我是jtc的创建者-用于JSON操作的shell cli工具

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM