需要帮助来解析和打印'类别'值使用jq或jsawk或shell脚本

时间:2015-12-22 23:52:45

标签: json jq jsawk

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

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

2 个答案:

答案 0 :(得分:1)

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

.. | objects.category // empty

返回以下字符串:

"cocker spaniel"
"dog"

答案 1 :(得分:0)

这是一个解决方案,它使用 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所以上面的内容实际上就是

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