以下どこでも任意の複雑なJSON構造内部の文字列で先頭と末尾のスペースを削除します:
#!/usr/bin/env jq -cf
# Define walk function (standard library only for jq 1.6 and newer, currently unreleased)
def walk(f):
. as $in
| if type == "object" then
reduce keys_unsorted[] as $key
({}; . + { ($key): ($in[$key] | walk(f)) }) | f
elif type == "array" then map(walk(f)) | f
else f
end;
walk(
if type == "string" then
(sub("^[[:space:]]+"; "") | sub("[[:space:]]+$"; ""))
else . end
)
つ(例えばtrim-json
で)上記を保存し、その後、(chmod +x trim-json
)実行可能ファイルをマークした場合./trim-json <<<"$json"
あなたの与えられた入力を発する:同様
[{"k1":"v1","k2":"v2","k3":"v3","k4":"v4"}]
、更新入力して:
$ json='[{"k1":" http://url", "k2":null, "k3":" v3", "k4":" v4"}]'
$ ./trim-json <<<"$json"
[{"k1":"http://url","k2":null,"k3":"v3","k4":"v4"}]
あなたは 'walk'機能を持っているのに十分JQ新しいを持っていますか? –
btw、 'echo $ json'は実際にはちょっとバグです。もしあなたの空白で囲まれた' * 'があなたのテキストにあれば、それはファイル名のリストに置き換えられます。 $ json "'をエコーする方がずっと優れています。 –
@CharlesDuffy最新の 'jq'バージョンがあります。 –