特定の単語の後に値を取得する必要があります。

特定の単語の後に値を取得する必要があります。

この行から「名前」の値を取得する必要があります。

"snapshots": [{"name":"sLVZt","user":"comment","current":"n","created":"2015-03-11 05:28:02"},{"name":"ubg9x","user":"test2",{"name":"lo3Qp","user":"test3","current":"y","created":"2015-03-11 06:02:46"}]}

私は出力が次のようになりたいです。

sLVZt
ubg9x
lo3Qp

ベストアンサー1

JSON文書が有効であるとします。

{"snapshots":[{"name":"sLVZt","user":"comment","current":"n","created":"2015-03-11 05:28:02"},{"name":"ubg9x","user":"test2"},{"name":"lo3Qp","user":"test3","current":"y","created":"2015-03-11 06:02:46"}]}

または(非データスペースはフォーマットに依存しないため)

{
  "snapshots": [
    {
      "name": "sLVZt",
      "user": "comment",
      "current": "n",
      "created": "2015-03-11 05:28:02"
    },
    {
      "name": "ubg9x",
      "user": "test2"
    },
    {
      "name": "lo3Qp",
      "user": "test3",
      "current": "y",
      "created": "2015-03-11 06:02:46"
    }
  ]
}

jq次に、次のように使用します。

$ jq -r '.snapshots[].name' file.json
sLVZt
ubg9x
lo3Qp

nameこれにより、配列の各要素のキー値が抽出されますsnapshots

さまざまな方法で他のキーの値に基づいて結果を簡単にフィルタリングすることもできます。

$ jq -r '.snapshots[] | select(.current == "y").name' file.json
lo3Qp
$ jq -r '.snapshots[] | select(.current != "n").name' file.json
ubg9x
lo3Qp

おすすめ記事