私の入力ファイルは次のようになります。
{
"login": "dmaxfield",
"id": 7449977,
...
}
{
"login": "dmaxfield",
"id": 7449977,
...
}
私はこれですべてのログイン名を取得できます: cat members | jq '.[].login'
しかし、ログインとIDの両方を取得するために構文を解読することができませんでしたか?
私の入力ファイルは次のようになります。
{
"login": "dmaxfield",
"id": 7449977,
...
}
{
"login": "dmaxfield",
"id": 7449977,
...
}
私はこれですべてのログイン名を取得できます: cat members | jq '.[].login'
しかし、ログインとIDの両方を取得するために構文を解読することができませんでしたか?
回答:
を使用jq '.[] | .login, .id'
して、各ログインとそれに続くIDを取得できます。
jq
オブジェクトのシーケンスでうまく機能します-配列ラッパーは必要ありません。...
文字列と最後の末尾のコンマの必要性の除去が、私は暗示されるようにすることを検討してください。
jq '.[] | {login, id}'
login.name
ですか?jq '.[] | {login.name, id}'
うまくいくようですが、適切な方法は何ですか?
jq '.[] | {name: .login.name, id}'
これは私のために働きます:
> echo '{"a":1,"b":2,"c":3}{"a":1,"b":2,"c":3}' | jq '{a,b}'
{
"a": 1,
"b": 2
}
{
"a": 1,
"b": 2
}
ここにもう1つの例を示します(jq-1.6):
配列をウォークスルーし、オブジェクト要素のフィールドとそのオブジェクト内のオブジェクトのフィールドを選択します
echo '[{"id":1, "private_info": {"name": "Ivy", "age": 18}}, {"id":2, "private_info": {"name": "Tommy", "aga": 18}}]' | jq ".[] | {id: .id, name: .private_info.name}" -
{
"id": 1,
"name": "Ivy"
}
{
"id": 2,
"name": "Tommy"
}
サンプルデータなし:
jq ".[] | {id, name: .private_info.name}" -
.[]
:配列をウォークスルー
{id, name: .private_info.name}
:.idと.private_info.nameを取得し、それぞれフィールド名「id」と「name」のオブジェクトにラップします。