Shell-Script
用空數組辨識 .json 文件?
我有一個包含多個 .json 文件的文件夾。某些文件帶有空數組,範例文件:
{ "WarehouseActivity": [] }
除了上面顯示的數據之外,該文件沒有其他數據。
我需要辨識這些文件並將它們移動到錯誤文件夾中。關於如何解決這個問題的任何建議都會很棒。
謝謝,凱文
**
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
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
這與 Roman 在他的 answer中採用的方法或多或少相同,但使用了不同的
jq
表達方式。該表達式
..|select(type == "array" and length == 0)
將遞歸完整的 JSON 結構並選擇它的所有零長度數組位(任何位置,任何深度)。如果
select()
成功,則將jq
以零退出狀態(成功)退出,這意味著 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