我有一个包含多个 .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
则将以零退出状态退出(成功),这意味着 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