Shell-Script

用空數組辨識 .json 文件?

  • June 8, 2021

我有一個包含多個 .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

引用自:https://unix.stackexchange.com/questions/441765