有单独的数组,如何根据列名提取值?

时间:2017-01-05 16:32:05

标签: json jq

我正在尝试使用JQ从一些JSON中提取数据 - 我已经把它归结为我需要提取的最后一级数据,但我完全不知道如何继续这部分如何数据已格式化。

一个例子是:

{
  "values": [
    [
      1483633677,
      42
    ]
  ],
  "columns": [
    "time",
    "count_value"
  ],
  "name": "response_time_error"
}

我想只提取某个列的值(例如count_value),我可以在这种特定情况下使用[-1]来提取它,但我想按名称选择列如果他们将来改变。

2 个答案:

答案 0 :(得分:1)

如果您只提取单个值并且数组将始终彼此对应,您可以在columns数组中找到索引,然后将该索引用于values数组。

似乎values是包含这些值的行数组。假设您要输出所选行的值:

$ jq --arg col 'count_value' '.values[][.columns | index($col)]' input.json

答案 1 :(得分:1)

如果.columns中不存在指定的列名,那么Jeff的过滤器将失败并显示相当模糊的错误消息。因此,最好检查是否找到了列名。以下是如何操作的说明:

 jq --arg col count_value '
   (.columns | index($col)) as $ix
   | if $ix then .values[][$ix] else empty end' input.json

如果您想要打印信息性错误消息,请将empty替换为:

error("specified column name, \($col), not found")