json - jq 按键递归搜索值,从

标签 json jq

TL;DR

什么是相当于以下命令中的grep '"\/v6'

jq '.. .pattern? // empty' /tmp/all.json | grep '"\/v6'

考虑以下 json;

{
  "payload": {
    "groups": [
      {
        "pattern": "/v6/",
        "groups": [
          {
            "pattern": "something/",
            "groups": [
              {
                "pattern": "somethingElse/",
                "groups": [
                  {
                    "pattern": "{specialPattern:[0-9]+}/",
                    "groups": [],
                    "routes": [
                      {
                        "type": "variable",
                        "pattern": "/v6/notImportant/{specialPattern:[0-9]+}/",
                        "methods": {

json文件很大,有很多不相关的数据

我正在 try catch json 文件中的所有 .pattern based on this question我创建了以下 jq 命令:

jq '.. .pattern? // empty' /tmp/all.json

这按预期工作,创建与此类似的输出;

"/v6/"
"something/"
"somethingElse/"
"{specialPattern:[0-9]+}/"
"/v6/notImportant/{specialPattern:[0-9]+}/"

问题:我如何选择以 /v6/ 开头的每个 .pattern ? 我用过像这样

jq '.. .pattern? // empty' /tmp/all.json | grep '"\/v6'

但是,必须有一个仅限 jq 的解决方案。


Google 教我有关 jq 的 contains这似乎是某种相关问题的答案;

不幸的是,我无法使其适合我的情况,因为使用 select 似乎没有必要。

最佳答案

要执行选择,您可以使用

select( test( "^/v6/" ) )

所以命令变成;

jq '.. .pattern? // empty | select(test("^/v6/"))' /tmp/all.json

或者类似地使用startswith

关于json - jq 按键递归搜索值,从,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63633913/

相关文章:

javascript - 在 jQuery $.each 中访问 JSON 中的多个对象/数组

c# - 返回嵌套数组 JSON 结果的 WEB API C#

arrays - Bash - 仅在出现新行而不是空格时进入下一个索引?

json - 使用 jq 从嵌套的 JSON 对象中提取选定的属性

json - 如何用 jq (或其他替代方法)解析 JSON 字符串?

json - 如何用jq合并两个json文件

javascript - 尝试在 JSON 数据中提供 JSON 字符串时,JSON 格式给出错误

json - 如何转换/合并 node.js/nconf 中的配置文件?

javascript - 过滤 JSON 数据的多个属性

command-line-interface - 尝试在 Github Action 中解析 JSON 输出