You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jq提取JSON中key1值内两个分隔符之间的内容?

问题说明

现有存储在file1.txt中的JSON数据如下:

{
    "foo": [
        {
            "bar": {
                "second": {
                    "key1": "some/path/to/delimiter1_FIRST_IMPORTANT_VALUE_delimter2",
                    "key2": "OK_as_it_is",
                    "key3": "Just to show there is more stuff"
                }
            }
        },
        {
            "bar": {
                "second": {
                    "key1": "some/path/to/delimiter1_SECOND_IMPORTANT_VALUE_delimter2",
                    "key2": "Also_OK_as_it_is",
                    "key3": "Just to show there is more stuff"
                }
            }
        }
    ]
}

需求是提取key1值中位于delimiter1和delimiter2之间的内容(即_FIRST_IMPORTANT_VALUE_和_SECOND_IMPORTANT_VALUE_)。之前使用固定索引的jq命令能得到结果,但存在第二个提取内容缺失最后一个字符的问题,需要替换成基于分隔符的动态提取方式,实现通用的单行jq命令。

解决方案

这里提供两种通用的单行jq命令:

方法1:正则捕获组

利用jq的match函数匹配分隔符之间的内容,通过捕获组提取目标字符串:

cat file1.txt | jq '.foo[].bar.second | (.key1 | match("delimiter1(.*)delimiter2").captures[0].string), .key2'

这种方法通过正则精准定位分隔符,捕获中间的任意内容,适配不同长度的key1值,不会出现字符缺失问题。

方法2:字符串拆分

通过split函数将字符串按分隔符拆分,取中间的部分:

cat file1.txt | jq '.foo[].bar.second | (.key1 | split("delimiter1")[1] | split("delimiter2")[0]), .key2'

先按delimiter1拆分字符串,取拆分后的第二部分;再按delimiter2拆分,取第一部分,即可得到两个分隔符之间的内容。

这两种方法都不需要依赖bash变量,纯jq实现动态提取,完全替代原命令中的固定索引逻辑。

内容的提问来源于stack exchange,提问作者rednectar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:16:10