繁体   English   中英

需要帮助才能使用 jq 或 jsawk 或 shell 脚本解析和打印“类别”值

[英]Need help to parse and print only 'category' values either using jq or jsawk or shell script

需要帮助来解析和打印仅使用 jq 或 jsawk 或 shell 脚本的category值。

{
  "fine_grained": {
    "dog": [
      {
        "category": "cocker spaniel",
        "mark": 0.9958831668
      }
    ]
  },
  "coarse": [
    {
      "category": "dog",
      "mark": 0.948208034
    }
  ]
}

假设所有category值都是简单字符串并且您想要所有类别值,无论它在 JSON 中的哪个位置,您都可以使用 jq 使用此过滤器:

.. | objects.category // empty

这将返回以下字符串:

"cocker spaniel"
"dog"

这是一个使用leaf_paths选择查找具有叶“类别”成员的所有路径的解决方案,然后使用foreach提取相应的值

foreach (leaf_paths | select(.[-1] == "category")) as $p (
    .
  ; .
  ; getpath($p)
)

如果您的输入位于名为input.json的文件中,而上述过滤器位于名为filter.jq的文件中,则 shell 命令

jq -f filter.jq input.json

应该产生

"cocker spaniel"
"dog"

如果您不想在输出中使用引号,则可以使用-r标志。

编辑:我现在意识到foreach E as $X (.; .; R)形式的过滤器几乎总是可以重写为E as $X | R E as $X | R所以上面真的只是

  (leaf_paths | select(.[-1] == "category")) as $p
| getpath($p)

暂无
暂无

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

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