本文へスキップ

jq実験場

jq Playground

貼り付けたJSONにjq 1.7のフィルタをブラウザ内で実行し、チートシートと同じ結果を出すコマンドラインを渡します。

jqのフィルタを、ブラウザの中で文書に対して実行します。文字列の操作をいくつか並べたものではなく、jq 1.7の文法を実装したインタプリタなので、パイプも`reduce`も`def`も、分解代入も更新の演算子も、コマンドラインと同じように動きます。フィルタの下には、同じことをするシェルのコマンドが出ます。

🔒 ブラウザの中だけで動きますjqjsonqueryplayground

フィルタ

jq '.orders[] | select(.status == "shipped") | {id, customer}' data.json

入力 JSON

.json ファイルを置く

このタブの中だけで読みます。どこにもアップロードしません。

出力 1件

出力

1

時間

<1 ms

型

object

jq 1.7 の文法をここで直接実装したインタプリタです。対応しているのはパス(.a[0].b, .., ?)、|·,·//、算術・比較・and/or/not、文字列の埋め込み、if・try・reduce・foreach・as(分割代入を含む)・def、そして |=·+= のような更新、@base64·@csv のようなフォーマット、下に並ぶ組み込み関数 180個です。テストは jq のマニュアルにある例そのものです。

対応していないもの:input·inputs(文書はひとつだけです)、$ENV·env(空です)、label·break、--stream、@sh の中の入れ子配列、strptime の ISO 8601 以外の書式、getpath のストリームモード、モジュール(import)。正規表現は jq の Oniguruma ではなくブラウザのエンジンで動くので、\p{L} と名前付きグループは使えますが、後読みのあたりに細かな違いがあるかもしれません。

パスをひとつ取り出したいだけなら JSONPathテスターのほうが簡単かもしれません。

使い方

  1. 文書を貼り付けます

    JSONの値が1つでも、いくつか続いていても構いません。jqの入力ストリームとして読み、いくつあるかをパネルの見出しに表示します。

  2. フィルタを書くか、例の並びから1つ取ります

    ボタンが、よく出てくる形を押さえています。select、map、group_by、文字列への埋め込み、reduce、そして更新の演算子です。マウスを載せると、何をするものかが出ます。

  3. コマンドラインで使うのと同じフラグを立てます

    出力1つにつき1行なら`-c`、キーの並べ替えは`-S`、文字列をクォートなしで出すなら`-r`、複数の入力を1つの配列にまとめるなら`-s`です。下のコマンドラインも一緒に更新されます。

  4. 出力だけでなく、コマンドもコピーします

    生成された`jq …`の行は、POSIXのシェルに合わせて正しくクォートしてあるので、スクリプトやパイプラインにそのまま入れられます。

よくある質問

これは本当にjqですか

jqの文法を別に実装したインタプリタで、テストにはjqのマニュアルにある例をそのまま使っています。言語と、よく使う組み込み関数を扱います。jqそのものをコンパイルしたものではないので、jqのCの内部に頼るものは違う動きをします。

`input`が使えないのはなぜですか

ここには文書が1つしかなく、フィルタがさらに引き出せるストリームが無いからです。`input`、`inputs`、`$ENV`、`env`、`label`/`break`、`--stream`、モジュールは、理由も分からず失敗する代わりに、対応していないとページに書いてあります。

正規表現がjqと違う動きをします

jqはOnigurumaを使い、ここではブラウザのエンジンを使います。実際には`\p{L}`も名前付きのグループも両方で動き、差が出るのは後読みと、いくつかの文字クラスのエスケープのあたりです。大事なパターンなら、実際に動かす環境で確かめてください。

出力が5,000個で止まりました

ステップ数の上限とともに、意図的に置いた限界です。大きな文書に`..`をかければ出力は膨大になりますし、再帰が暴走するフィルタは、そのままではタブを固まらせます。フィルタを絞るか、`head`に流せるコマンドラインで動かしてください。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。