【问题标题】:Having separate arrays, how to extract value based on the column name?有单独的数组,如何根据列名提取值?
【发布时间】:2017-01-05 16:32:04
【问题描述】:

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

一个例子是:

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

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

【问题讨论】:

  • 所以迭代列数组并测试所需的字符串值。当你得到一个命中记录时,索引和你的答案是 values[index]。
  • 这里有很多关于如何迭代数组的例子:stackoverflow.com/questions/8489288/…

标签: json jq


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果指定的列名在 .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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      相关资源
      最近更新 更多