複数の.jsonファイルを含むフォルダがあります。一部のファイルには空の配列があります。サンプルファイルは次のとおりです。
{
"WarehouseActivity": []
}
このファイルには上記以外のデータはありません。
これらのファイルを識別してエラーフォルダに移動する必要があります。この問題を解決する方法に関する提案があれば良いでしょう。
ありがとう、キャビン
答え1
mkdir -p error_folder &&
for json in ./*.json; do
if jq -e '.. | select(type == "array" and length == 0)' "$json" >/dev/null
then
mv "$json" error_folder/
fi
done
これはローマが取ったアプローチとほぼ同じです。彼の答えしかし、別のjq
表現を使用します。
この式は..|select(type == "array" and length == 0)
JSON構造全体に対して繰り返され、その中の長さがゼロの配列ビット(すべての位置、深さ)をすべて選択します。
select()
成功すると、jq
終了ステータスは0(成功)で終了します。これは、JSONドキュメントのどこかに空の配列が含まれていることを意味します(またはファイルが完全に空です)。これにより、文書がerror_folder
スクリプトに移動されます。
以下の説明を見ると、ユーザーがアレイにのみ興味を持っていることは明らかですWarehouseActivity
。
jq
私のコードの修正された表現:
mkdir -p error_folder &&
for json in ./*.json; do
if jq -e '.. | .WarehouseActivity? | select(type == "array" and length == 0)' "$json" >/dev/null
then
mv "$json" error_folder/
fi
done
答え2
Jq
処理/分析に適したツールになります。JSONデータ:
for f in *.json; do
if jq -e 'keys_unsorted as $keys
| ($keys | length == 1)
and .[($keys[0])] == []' "$f" > /dev/null; then
mv "$f" error_dir/
fi
done