2016-07-21 7 views
5

を解析JQのJSONの最初の(又はn番目)の要素を取得します'select'を使用しているエントリ)、どのようにして1つのエントリを選択し、ここに表示されるエラーを回避できますか?アレイをフィルタリングするフィルタ recivce

$ echo '[{"a":"x", "b":true}, {"a":"x", "b":false},{"a":"XML", "b":false}]' | jq '.[] | select(.a == "x")' 
{ 
    "a": "x", 
    "b": true 
} 
{ 
    "a": "x", 
    "b": false 
} 
$ echo '[{"a":"x", "b":true}, {"a":"x", "b":false},{"a":"XML", "b":false}]' | jq '.[] | select(.a == "x") | .[1]' 
jq: error (at <stdin>:1): Cannot index object with number 

答えて

8

を取る:

jq '[.[]|select(.a=="x")][1]' your.json 

出力:

{ 
    "a": "x", 
    "b": false 
} 
0

使用map

cat raw.json|jq -r -c 'map(select(.a=="x"))|.[1]' 
map

このコマンド

cat raw.json|jq -r -c 'map(select(.a=="x"))' 

途中結果に

[{"a":"x","b":true},{"a":"x","b":false}]

.[1]を与えるあなたは配列にselectからの結果をラップすることができ、最初の要素

+1

を生成します。 – tink

2

JQもfirst/0last/0nth/1ので、この場合には、フィルタ

(map(select(.a == "x")) | first ) 
, (map(select(.a == "x")) | last ) 
, (map(select(.a == "x")) | nth(1)) 

{ 
    "a": "x", 
    "b": true 
} 
{ 
    "a": "x", 
    "b": false 
} 
{ 
    "a": "x", 
    "b": false 
} 

追加ストリーミング形式'first/1''last/1'を生成を提供しますそして'nth/2'

(first(.[] | select(.a == "x"))) 
, (last(.[] | select(.a == "x"))) 
, (nth(1; .[] | select(.a == "x"))) 

このデータとなるもご用意しており、私は私が間違っていたとは思わない

{ 
    "a": "x", 
    "b": true 
} 
{ 
    "a": "x", 
    "b": false 
} 
{ 
    "a": "x", 
    "b": false 
} 
関連する問題

 関連する問題