jsonfile
JSON入力()を解析するスクリプトを作成しています。
{
"key11":1010,"key11_yes":13,"key11_no":14,
"key12":12120,"key12_yes":9,"key12_no":25,
"key13":12103,"key13_yes":13,"key13_no":20
}
jq tools
次のように値を使用して確認したいと思います。key11
key12
key13
cat jsonfile | jq 'key[1-9][1-9]'
このパターンは-style正規表現のように機能したいと思いますgrep
。
cat jsonfile | grep 'key[1-9][1-9]'
一致するキーの値がnullの場合、私のスクリプトはexit 0
.
key[1-9]_[this part is null]
また、if(つまり、_yes
orを追加せずに_no
)thenの2番目のパラメータも確認する必要がありますexit 0
。
答え1
jq
次の正規表現フィルタ (test
、、、match
)capture
は生のテキストを入力として使用します。キー名に正規表現を適用するには、まずそのキー名をテキストに変換する必要があります。
jq
機能を提供するto_entries
その理由は次のとおりです。
cat jsonfile | jq 'to_entries'
出力:
[ { 「キー」:「キー11」、 "値": 1010 }, { "キー": "key11_yes", "値": 13 }, { "キー": "key11_no", "値": 14 }, { 「キー」:「キー12」、 "値": 12120 }, ... ]
その後、キーを抽出して正規表現についてテストし、項目全体を出力または無視するフィルタに入力できます。
if (.key|test("key[0-9][0-9]$")) then ( {key: .key, value: .value } ) else empty end
一致from_entries
関数は、残りの項目を元の形式に変換し直すか、これらすべてをwith_entries
1つのステップで実行できます。
cat jsonfile|jq 'with_entries(if (.key|test("key[0-9][0-9]$")) then ( {key: .key, value: .value } ) else empty end )'
結果は、キーがパターンに一致する入力のすべてのペアです。
{
"key11": 1010,
"key12": 12120,
"key13": 12103
}