空の配列を持つ.jsonファイルを認識しますか?

空の配列を持つ.jsonファイルを認識しますか?

複数の.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

関連情報