これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド jshon です。
プログラム:
NAME
ジョン — シェル用の JSON パーサー
SYNOPSIS
ジョン -[P|S|Q|V|C|I|0] [-F パス] -[t|l|k|u|p|a] -[s|n] 値 -[e|i|d]索引
DESCRIPTION
ジョン JSON を解析、読み取り、作成します。 可能な限り使用できるように設計されています。
シェル内で、grep/sed/awk で作られた脆弱なアドホック パーサーを置き換えます。
Perl/Python で作られた重量級の XNUMX 行パーサー。
ジョン 標準入力から json テキストをロードし、アクションを実行して、最後のアクションを標準出力に表示します。
オプションの中には json を出力するものと、プレーンテキストの概要を出力するものがあります。 Bash には非常に優れた機能があるため、
ネストされたデータ構造が貧弱である、 ジョン 通常、JSON をネイティブ オブジェクトとして返しません。
図書館でしょう。 その代わり ジョン は編集履歴をスタックに保持し、ユーザーは
一番上のJSON要素。
ACTIONS
各アクションは短いオプションの形式をとります。 引数が必要なものもあります。 多くの例がある一方で、
of ジョン 相互にパイプすることができます。アクションを減らすために、アクションは連続的に連鎖する必要があります。
呼び出します。 すべての例では、次の JSON サンプルを使用します。
{"a":1,"b":[true,false,null,"str"],"c":{"d":4,"e":5}}
jshon [アクション] < サンプル.json
最も一般的な読み取り専用の使用には、いくつかの機能だけが必要です。 -e アクションとそのXNUMX -a 真ん中に
それら。
-t (型) は文字列、オブジェクト、配列、数値、ブール値、null を返します
jshon -t -> オブジェクト
-l (長さ) は整数を返します。 文字列、オブジェクト、配列に対してのみ機能します。
jshon -l -> 3
-k (keys) は、改行で区切られたキーのリストを返します。 オブジェクトに対してのみ機能します。
jshon -k -> abc
-e index
(抽出) 「index」のjson値を返します。 オブジェクト、配列に対してのみ機能します。 のインデックス
配列は整数です。
jshon -ec -> {"d":4,"e":5}
-a (across) は、選択した要素全体に残りのアクションをマップします。 オブジェクトに対してのみ機能します
そして配列。 多数 -a 呼び出しはネストできますが、実際にはその必要はほとんどありません。
jshon -eb -a -t -> bool bool null string
-s 値
(文字列) は、JSON エンコードされた文字列を返します。 後で既存のファイルに (-i) 挿入できます。
構造。
jshon -s "バック\\スラッシュ" -> "バック\\スラッシュ"
-n 値
(非文字列/数値) は json 要素を返します。 後で既存のファイルに (-i) 挿入できます。
構造。 有効な値は、「true」、「false」、「null」、「array」、「object」、整数、および
浮く。 略語 t、f、n、[]、{} もそれぞれ使用できます。
jshon -n オブジェクト -> {}
-u (unstring) デコードされた文字列を返します。 単純な型でのみ機能します: string、int、real、
ブール値、null。
jshon -eb -e 3 -u -> str
-p (pop) スタックから最後の操作をポップし、履歴を巻き戻します。 役に立つ
XNUMX つのオブジェクトから複数の値を抽出します。
jshon -ec -ed -u -p -ee -u -> 4 5
-d index
(削除) 配列またはオブジェクト内の項目を削除します。 負の配列インデックスはラップされます
まわり。
jshon -db -> {"a":1,"c":{"d":4,"e":5}}
-i index
(挿入) は複雑です。 抽出の逆です。 抽出すると json サブ要素が挿入されます
スタック上にあります。 Insert はスタックからサブ要素を削除し、その部分の JSON を挿入します。
その下の大きな配列/オブジェクトにコピーします。 extract を使用して json ツリーに飛び込みます。
delete/string/nonstring を使用して内容を変更し、insert を使用して変更をプッシュして戻します。
ツリー。
jshon -ea -ia -> 元の json
jshon -s one -ia -> {"a":"one", ...}
配列は特別な方法で処理されます。 整数を渡すと、値を挿入せずに値が挿入されます。
上書き。 文字列「append」と同様に、負の整数を使用できます。 上書きするには
配列内の値: インデックスを削除します。 -n/s 新しい値をインデックスに挿入します。
jshon -eb -d 0 -sq -i 0 -> {"b":"q",false,null,"str"}
非操作
json を直接編集しないメタオプションがいくつかあります。 これらを呼び出すのは XNUMX 回あたり最大 XNUMX 回です
呼び出し。
-F
(file) は標準入力ではなくファイルから読み取ります。 操作を行わない唯一のオプションは、
引数。
-P (jsonp) は、通常に続行する前に jsonp コールバックを削除します。
-S (sort) は、元の順序ではなくキーでソートされた json を返します。
-Q (静か) stderr でのエラー報告を無効にします。そのため、「2> /dev/null」を散布する必要はありません。
スクリプト全体を通して。
-V (値渡し) は、編集履歴スタックでの値渡しを有効にします。 極端な場合には、
何千もの深くネストされた値が発生する可能性があります ジョン 動作が数倍遅くなる
数倍のメモリを使用しながら。 ただし、値渡しは参照渡しより安全です。
一般に、驚きは少なくなります。 参照による参照はデフォルトで有効になっています。
読み取り専用操作中にリスクが発生するため、一般に json の編集がより便利になります。
jshon -ec -n 7 -id -p -> c["d"] == 7
jshon -V -ec -n 7 -id -p -> c["d"] == 5
jshon -V -ec -n 7 -id -ic -> c["d"] == 7
-V 、変更は単にスタックを介して手動で挿入し直す必要があります。
中間値をポップオフします。
-C (続行) 回復可能なエラーの場合。 たとえば、そうでない値を抽出すると、
exist は、中止する代わりに編集スタックに「null」を追加します。 動作は変更される可能性があります
未来。
-I (インプレース) ファイル編集。 ファイルを変更する必要があるため、-F でのみ機能します。 これは
json ファイルにわずかな変更を加えるためのものです。 使用すると通常の出力が抑制されます
そして編集スタックの一番下が書き出されます。
-0 (null 区切り文字) -u の区切り文字を改行から null に変更します。 このオプション
-u のみに影響します。これは、改行が正規に出現する可能性があるのは -u のみであるためです。
出力。
- バージョン
YYYYMMDD タイムスタンプを返して終了します。
その他 ツール
ジョン 常に XNUMX 行に XNUMX つのフィールドを出力します。 多くの Unix ツールは複数のタブで区切られることを想定しています
行ごとのフィールド。 これを修正するには、「paste」を介して出力をパイプします。 ただし、ペーストはできません
空行を処理するので、それらをプレースホルダーで埋めます。 以下に例を示します。
ジション ... | sed 's/^$/-/' | 貼り付け -s -d '\t\t\n'
これにより、空白が「-」に置き換えられ、XNUMX 行ごとに XNUMX 行にマージされます。
json 出力を生成するツールはますます増えています。 多くの場合、これらは行指向のメソッドを使用します。
json/平文のハイブリッド。各行は独立した json 構造です。 悲しいことにこれが意味するのは
出力全体が正規の JSON ではありません。 データを XNUMX 行ずつループします
(電話中 ジョン 行ごとに XNUMX 回)、または正規の JSON 配列に変換します。 例えば:
行を読み取っている間; do jshon <<< "$line"; 完了 < <(journalctl -o json)
ジャーナルctl -o json | sed -e '1i[' -e '$!s/$/,/' -e '$a]' | じしょん
ゴルフ
非常に短いワンライナーを気にする場合、そうでない場合でも議論が凝縮される可能性があります。
曖昧さを引き起こす。 からの例 -ポップ) 以下のようにゴルフをすることができます。
jshon -ec -ed -u -p -ee -u == jshon -ec -ed -upee -u
私はこれを行うことはお勧めしません(理解が非常に難しくなります)が、一部の人は
結果にもかかわらずゴルフ。
作成 JSONの
ジョン 空のオブジェクトを入力として渡すことで json を作成できます。
jshon -s one -ia <<< "{}"
作者
ジョン カイル・キーンによって書かれた[メール保護]> Dave Reisner のパッチ付き
<[メール保護]>、AndrewF (BSD、OSX、jsonp、ソート)、Jean-Marc A (solaris)。
onworks.net サービスを使用してオンラインで jshon を使用する