2017-12-30 7 views
1

jqで次のjsonに固執しています。以下の要素は、タイムスタンプで降順にソートされます(jsonには含まれません)。 ID Xより前にIDを選択する必要があります。 ID 1の前にIDが2、3、5j番目のn番目の要素の前の要素を選択

[ 
    { 
    "id": 2, 
    "somekey": "somevalue" 
    }, 
    { 
    "id": 3, 
    "somekey": "somevalue" 
    }, 
    { 
    "id": 5, 
    "somekey": "somevalue" 
    }, 
    { 
    "id": 1, 
    "somekey": "somevalue" 
    }, 
    { 
    "id": 4, 
    "somekey": "somevalue" 
    } 
] 

JQとワンライナーでこれを行うにはどのように任意のアイデアを返す必要があります選択しますか?具体的には、前の要素を選択する部分です。

答えて

1

ショートとシンプル:

.[0: map(.id) | index(1)] 

ファンシーしかし速い:

label $top | .[] | if .id == 1 then break $top else . end 
0

私はこのクエリを考え出し:

[.[].id] | to_entries | .[0:map(select(.value==1))[].key][].value 

あなたが同じことを達成するために、より少ない冗長な方法を知っている場合、私に知らせて!

関連する問題