Memo/JavaScript/jq

https://dexlab.net:443/pukiwiki/index.php?Memo/JavaScript/jq
 

jq: JSONのCLIパーサ

  • jq CLIツール
  • 整形
echo '{ "key1":"value1" }' | jq .
{
  "key1": "value1"
}
  • オプション
    • -r: ダブルクオーテーション等の引用符を出力しない
    • -c: コンパクト。1行に納める
  • 記事

検索: select()

  • 完全一致
    .select(.Value == "example")
  • 正規表現を使って検索
    .select(.Value | test("example"))

nullを無視して検索

select()する時にnullが混ざっていると「Cannot iterate over null (null)」が出る。

  • .[]?

    Like .[], but no errors will be output if . is not an array or object.

  • 例: Valueに"example2" を含むレコードを出力
    echo '{"ResourceRecordSets":[{"AliasTarget":{"HostedZoneId":"example","EvaluateTargetHealth":false,"DNSName":"example.ap-northeast-1.elb.amazonaws.com."},"Type":"A","Name":"example.com."},{"ResourceRecords":[{"Value":"example2.ap-northeast-1.elb.amazonaws.com."}],"Type":"CNAME","Name":"www.example.com.","TTL":300}]}' \
    | jq '.ResourceRecordSets[] | select(.ResourceRecords[]?.Value | test("example2"))'

出力形式指定: csv, tsv, etc

  • dict型をarray型へ変換後、@csv出力
    echo '[ { "name": "foo", "val": 10 }, { "name": "bar", "val": 20 }  ]' | jq -r '.[] | [.name, .val] | @csv'
    "foo",10
    "bar",20

件数、合計、平均、最大、最小

  • 件数: length
  • 合計: add
  • 平均: add/length
  • 最大: max
  • 最小: min
  • 例:valを元に計算
    echo '[ { "id": 1, "val": 10 }, { "id": 2, "val": 20 }  ]' | jq '[.[].val] | length, add, add/length, max, min'
    2  # length
    30 # add
    15 # add/length
    20 # max
    10 # min

インストール

  • CentOS 7: epelリポジトリにある
    sudo yum install jq --enablerepo=epel
  • Ubuntu 18.04 LTS:
    sudo apt install jq

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-05-16 (木) 19:20:46 (8d)