jqでjson以外の文字列を表示する | 瀬戸内の雲のように

jqでjson以外の文字列を表示する

Posted: 2019-02-12


スポンサーリンク

目次

  • はじめに
  • 環境
  • 前提
  • やりたいこと
  • やり方
  • 解説
    • +を使うことで文字列を変更する
    • まとめ

      はじめに

      linuxのCLI上でjsonを扱うためには欠かせないjqコマンド。しかし出力がjson形式に縛られるので困るという方がいらっしゃるのではないでしょうか。

      実を言うとjqではjson以外も出力できます。

      今回はそのやり方をメモしていきたいと思います。

       

      環境

      jqコマンドがインストールされているlinux環境ならばだいたいOKだと思われます
      CentOS系にインストールする場合はこちらの記事: CentOS7に15秒でjqコマンドをインストールするをどうぞ。

       

      前提

      以下のようなjsonの入力値を例に説明します。

      # cat json.txt | jq "."
      {
        "users": [
          {
            "name": "Mura",
            "age": 30
          },
          {
            "name": "Ken",
            "age": 29
          }
        ]
      }
      

       

      やりたいこと

      上記のjsonを元に以下の文を出力します。

      Mura is 30 years old
      Ken is 29 years old
      

       

      やり方

      早速ですがやり方です。

      コマンド

      cat json.txt | jq '.users[] | .name = .name + " is " + (.age|tostring) + " years old" | .name'
      

      結果

      "Mura is 30 years old"
      "Ken is 29 years old"
      

       
      できました。

       

      解説

      ポイントは2点あります。

      • + を使うことで文字列を変更する
      • tostring を使い数値型を文字列型に変更する

      それぞれ詳細を解説します。

       

      +を使うことで文字列を変更する

      説明しているのは

      .name = .name + " is " + (.age|tostring) + " years old" 
      

      の部分です。

      ここの意味は name というキーの値(=Mura と Ken)に対して "is " と (.age|tostring) と "years old" という文字を結合する という意味です。

      ここで結合してできた新しい .name を最後に表示しているわけです。

       

      tostringを使い数値型を文字列型に変更する

      次は以下の部分の説明です。

      (.age|tostring)
      

      これは キー age のvalue、つまり 3029 を文字列に変換するということです。
      jqには型が存在しており、数値型のまま結合しようとすると

      jq: error (at <stdin>:1): string ("Mura is ") and number (30) cannot be added
      

      というように怒られてしまいます。

       

      まとめ

      以上、jqコマンドのちょっと便利な使い方でした。


      スポンサーリンク




      コメント一覧


      コメントを投稿する


      お名前


      コメント内容





      TOP back