我正在尝试使用JQ从一些JSON中提取数据 - 我已经把它归结为我需要提取的最后一级数据,但我完全不知道如何继续这部分如何数据已格式化。
一个例子是:
{
"values": [
[
1483633677,
42
]
],
"columns": [
"time",
"count_value"
],
"name": "response_time_error"
}
我想只提取某个列的值(例如count_value
),我可以在这种特定情况下使用[-1]
来提取它,但我想按名称选择列如果他们将来改变。
答案 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")