2017-01-05 22 views
0

我想从jq中提取某些json的数据 - 我已经把它归结到我需要提取的最后一级数据,但我完全难住如何继续处理这部分数据的格式。jq - 将键和值组合在单独的数组下

一个例子是:

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

我希望只提取对于特定列中的值(例如count_value)和I可以通过在此具体情况下,使用[-1]中提取它,但我想要在未来更改时按名称选择列。

+0

所以迭代列阵列和测试的必需的字符串值。当你得到命中注意时,索引和你的答案是值[索引]。 –

+0

大量的如何在这里迭代数组的示例:http://stackoverflow.com/questions/8489288/how-to-loop-through-json-array –

回答

1

如果您只提取一个值并且数组总是与eachother相对应,您可以在columns数组中找到该索引,然后将该索引用于values数组。

看起来好像values是具有这些值的行数组。假设你要输出与所选列的所有行的值:

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

如果指定的列名不.columns存在,那么杰夫的过滤器将失败,而令人费解的错误消息。因此,最好检查列名是否被找到。下面是如何这样做的一个例证:

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") 
相关问题