【问题标题】:Select matching substring选择匹配的子字符串
【发布时间】:2019-07-09 17:44:44
【问题描述】:

给定以下的ideal2.json


[
    {
    "url": "/classroom-videos/lesson1/sublesson1/video",
        "data": {
            "fieldset": "lesson-video-overview",
            "title": "5th Grade Math - Interpreting Fractions",
        },
        "order": 4
    },
    {
    "url": "/classroom-videos/lesson1/sublesson2/video",
        "data": {
            "fieldset": "lesson-video-clip-single",
            "title": "Post-Lesson Debrief Part 5",
        },
        "order": 14
    },
    {
        "url" : "about-us",
        "data": {
            "fieldset": "lesson-video-clip-single",
            "title": "Lesson Part 2B",
        },
        "order": 6
    }
]

我只想提取 url 以 /classroom-videos/ 开头的项目

理想情况下,我的输出应该是这样的:


[
    {
    "url": "/classroom-videos/lesson1/sublesson1/video",
        "data": {
            "fieldset": "lesson-video-overview",
            "title": "5th Grade Math - Interpreting Fractions",
        },
        "order": 4
    },
    {
    "url": "/classroom-videos/lesson1/sublesson2/video",
        "data": {
            "fieldset": "lesson-video-clip-single",
            "title": "Post-Lesson Debrief Part 5",
        },
        "order": 14
    }
]

我尝试了很多变化,但都没有运气: 例如 select(.url | contains("yomama")) 生产 jq:错误(在:47):无法使用字符串“url”索引数组 退出状态 5

.[].url 生成一个包含所有 url 的漂亮列表

【问题讨论】:

  • @peak 我尝试了很多变化,以至于我的大脑有点旋转。如果这有助于澄清我正在尝试做的事情,我当然可以发布很多尝试。
  • 为什么不花点时间看看你的其他 SO 问题的答案,然后看看 jq 教程和参考手册的相关部分。
  • 感谢@peak 的建议。我已经通过手册、谷歌和 SO 敲定了很长一段时间。我想我刚刚想通了。 :-)

标签: json jq


【解决方案1】:

看起来这样可以解决问题:

jq '.[] | select(.url |test("classroom-videos"))'

【讨论】:

  • 原始问题指定“url以”开头,所以startswith(...)或test("^...")比较合适。
  • 感谢@peak,您非常感谢您添加匹配的子字符串。我相信这会帮助其他尝试解决类似问题的人
猜你喜欢
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多